实现同台服务器同时运行WordPress与Discourse

目录 文章

盈透中文社区站点就是通过一台服务器同时运行WordPress和Discourse项目的。刚好有时间,顺便整理一下如何部署这两个项目,同时也希望能帮到一些需要的站长们!要实现同一台服务器同时运行WordPress和Discourse有2种方式,一种是全新安装(即服务器上并没有运行WordPress和Discourse的项目),另一种则是已经有Discourse项目运行着了。

这里就说说全新安装方式:

服务器配置清单

简思录站点服务器托管在Qcloud。购于2017年10月26号,当时看到双十一广告,一口气买了3年,花费1534.60元,还是挺划算的,需要购买的请猛戳该链接

    Linux Server [2 Core CPU, 4G Memory, 50G Disk, 64 位] – Debian Server 9.0 64 位

WordPress部署

WordPress运行需要LNMP环境(Linux + Nginx+ MySQL+ PHP),这里我们可以采用LNMP一键安装包,推荐OneinStack,官网链接:https://oneinstack.com/

OneinStack安装这里就不详细阐述了,如果不明白安装的可以去OneinStack官网查看安装教程,非常详细。那么下面的步骤我就权当你已经成功运行WordPress了。

Nginx配置

如果是通过oneinstack一键安装包的,Nginx的配置文件路径为:/usr/local/nginx/conf/vhost

进入该目录后,修改你绑定域名的配置文件,参考代码如下:

server {
  listen 80;
  listen 443 ssl http2;
  ssl_certificate /usr/local/nginx/conf/ssl/jiansilu.com.crt;  #修改为你证书的路径
  ssl_certificate_key /usr/local/nginx/conf/ssl/jiansilu.com.key;  #修改为你证书的路径
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
  ssl_prefer_server_ciphers on;
  ssl_session_timeout 10m;
  ssl_session_cache builtin:1000 shared:SSL:10m;
  ssl_buffer_size 1400;
  add_header Strict-Transport-Security max-age=15768000;
  ssl_stapling on;
  ssl_stapling_verify on;
  server_name jiansilu.com www.jiansilu.com;  #修改为你的域名
  location / {
	access_log /data/wwwlogs/jiansilu.com_nginx.log combined;
	index index.html index.htm index.php;
	root /data/wwwroot/jiansilu.com;  #修改为你站点的目录
	if ($ssl_protocol = "") { return 301 https://$host$request_uri; }
	if ($host != jiansilu.com) {  return 301 $scheme://jiansilu.com$request_uri;  }  #修改为你的域名
	include /usr/local/nginx/conf/rewrite/wordpress.conf;
    #error_page 404 /404.html;
    #error_page 502 /502.html;
  
	location ~ [^/]\.php(/|$) {
		#fastcgi_pass remote_php_ip:9000;
		fastcgi_pass unix:/dev/shm/php-cgi.sock;
		fastcgi_index index.php;
		include fastcgi.conf;
	}

	location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
		expires 30d;
		access_log off;
	}
	location ~ .*\.(js|css)?$ {
		expires 7d;
		access_log off;
	}
	location ~ /\.ht {
	    deny all;
	}
  }
  location /community/ { # /community/ 为站点子目录名称,例如:https://jiansilu.com/community
	proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
	proxy_set_header Host $http_host;
	proxy_http_version 1.1;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	proxy_set_header X-Forwarded-Proto https;
  }
}

然后,执行如下命令:

root@localhost:~# sudo nginx -t # 测试配置文件
# 重要:如果 nginx -t 返回了错误,请一定要修正配置!
root@localhost:~# sudo service nginx reload #加载配置文件
root@localhost:~# sudo service nginx restart #重启nginx

好了,到这里WordPress和Nginx配置就可以了,接下来就可以部署Discourse了。

Discourse部署

运行命令安装docker

root@localhost:~# curl -sSL https://get.docker.com/ | sh

运行命令创建discourse目录与克隆项目,并进入discourse目录

root@localhost:~# sudo -s
root@localhost:~# mkdir /var/discourse
root@localhost:~# git clone https://github.com/discourse/discourse_docker.git /var/discourse
root@localhost:~# cd /var/discourse

创建app.yml配置文件,并上传至/var/discourse/containers ,参考代码如下:

## this is the all-in-one, standalone Discourse Docker container template
##
## After making changes to this file, you MUST rebuild
## /var/discourse/launcher rebuild app
##
## BE *VERY* CAREFUL WHEN EDITING!
## YAML FILES ARE SUPER SUPER SENSITIVE TO MISTAKES IN WHITESPACE OR ALIGNMENT!
## visit http://www.yamllint.com/ to validate this file as needed

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
  - "templates/web.socketed.template.yml"
## Uncomment these two lines if you wish to add Lets Encrypt (https)
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

## which TCP/IP ports should this container expose?
## If you want Discourse to share a port with another webserver like Apache or nginx,
## see https://meta.discourse.org/t/17247 for details
expose:
  #- "80:80"   # http
  #- "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Set db_shared_buffers to a max of 25% of the total memory.
  ## will be set automatically by bootstrap based on detected RAM, or you can override
  db_shared_buffers: "768MB"   # 根据服务器配置修改,如果内存是2g的话改为256MB,4G则768MB

  ## can improve sorting performance, but adds memory usage per-connection
  #db_work_mem: "40MB"

  ## Which Git revision should this container use? (default: tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## How many concurrent web requests are supported? Depends on memory and CPU cores.
  ## will be set automatically by bootstrap based on detected CPUs, or you can override
  UNICORN_WORKERS: 4    #根据服务器配置修改,如果CPU是1核的话改为2,2核则4

  ## TODO: The domain name this Discourse instance will respond to
  DISCOURSE_HOSTNAME: jiansilu.com     #修改成你的域名
  DISCOURSE_RELATIVE_URL_ROOT: /community     #修改成你discourse子目录名称

  ## Uncomment if you want the container to be started with the same
  ## hostname (-h option) as specified above (default "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: List of comma delimited emails that will be made admin and developer
  ## on initial signup example 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: '3303500@qq.com'   #管理员邮箱

  ## TODO: The SMTP mail server used to validate new accounts and send notifications
  DISCOURSE_SMTP_ADDRESS: smtp.exmail.qq.com    #修改成你SMTP邮箱的服务器
  DISCOURSE_SMTP_PORT: 587     #修改成你SMTP邮箱的服务器端口
  DISCOURSE_SMTP_USER_NAME: info@jiansilu.com     #修改成你的SMTP邮箱
  DISCOURSE_SMTP_PASSWORD: "jiansilu.com"    #修改成你的SMTP邮箱密码
  DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optional, default true)
  DISCOURSE_SMTP_AUTHENTICATION: login
  DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

  ## If you added the Lets Encrypt template, uncomment below to get a free SSL certificate
  #LETSENCRYPT_ACCOUNT_EMAIL: 3303500@qq.com

  ## The CDN address for this Discourse instance (configured to pull)
  ## see https://meta.discourse.org/t/14857 for details
  #DISCOURSE_CDN_URL: //discourse-cdn.example.com

## The Docker container is stateless; all data is stored in /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Plugins go here
## see https://meta.discourse.org/t/19157 for details
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Any custom commands to run after building
run:
  ## Subfolder support
  - exec:
        cd: $home
        cmd:
          - mkdir -p public/community  #修改成你discourse子目录名称
          - cd public/community && ln -s ../uploads && ln -s ../backups  #修改成你discourse子目录名称
  - replace:
       global: true
       filename: /etc/nginx/conf.d/discourse.conf
       from: proxy_pass http://discourse;
       to: |
          rewrite ^/(.*)$ /community/$1 break;   #修改成你discourse子目录名称
          proxy_pass http://discourse;
  - replace:
       filename: /etc/nginx/conf.d/discourse.conf
       from: etag off;
       to: |
          etag off;
          location /community {    #修改成你discourse子目录名称
             rewrite ^/community/?(.*)$ /$1;     #修改成你discourse子目录名称
          }
  - replace:
         filename: /etc/nginx/conf.d/discourse.conf
         from: $proxy_add_x_forwarded_for
         to: $http_fastly_client_ip
         global: true
  - exec: echo "Beginning of custom commands"
  ## If you want to set the 'From' email address for your first registration, uncomment and change:
  ## After getting the first signup email, re-comment the line. It only needs to run once.
  - exec: rails r "SiteSetting.notification_email='info@jiansilu.com'"   #修改成管理邮箱
  - exec: echo "End of custom commands"

运行命令安装discourse

root@localhost:/var/discourse# ./launcher bootstrap app

安装discourse完成后,运行命令启动discourse

root@localhost:/var/discourse# ./launcher start app

duan~~~,至此就完成WordPress和Discourse同时运行在一个服务器了。

暂无评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注