一、准备工作
- 准备2台计算机,一台安装centos,一台安装ubuntu。
- centos上主要是代理功能,只是安装一个Nginx应用,其它什么都不安装。
- Ubuntu需要先安装docker应用,然后安装docker-compose来部署WordPress和nextcloud这两个应用。
- 详细表格:
序号 |
服务器版本 |
计算机名称 |
域名 |
IP地址 |
端口 |
应用 |
用途 |
1 |
centos |
proxy |
contoso.com |
172.16.0.40 |
80 |
Nginx |
代理转发 |
2 |
Ubuntu |
container |
wordpress.contoso.com |
172.16.0.50 |
8000 |
wordpress |
博客 |
3 |
Ubuntu |
container |
nextcloud.contoso.com |
172.16.0.50 |
8080 |
nextcloud |
云盘 |
二、安装Nginx和docker以及docker-compose
- 在proxy这台主机上安装Nginx
- 配置Nginx源
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
- 查询Nginx
yum list nginx
- 导入nginx 源
yum-config-manager --enable nginx-mainline
- 安装Nginx
yum -y install nginx
- 查看版本和安装的模块
nginx -v
nginx -
- 在container主机上安装docker和cocker-compose
- 先切换到root身份下
su - root
- 更新系统
sudo apt update
sudo apt upgrade
sudo apt full-upgrade
- 添加docker源
apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release -y
- 添加 Docker 的官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- 添加 Docker 官方库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 更新 Ubuntu 源列表
apt update
- 安装 Docker
apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
- 检查不同版本的docker
apt-cache madison docker-ce
- 指定docker版本安装
apt install docker-ce=5:20.10.16~3-0~ubuntu-jammy docker-ce-cli=5:20.10.16~3-0~ubuntu-jammy containerd.io
- 检查docker服务
systemctl status docker
- 启动docker并设置开机自启
systemctl start docker && systemctl enable docker
- 查看已安装的 Docker 版本
docker version
- 安装docker-compose
curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- 给docker-compose授权
chmod a+x /usr/local/bin/docker-compose
三、使用docker-compose安装应用
- 为了使用规范现在/root目录下新建一个wordpress文件夹
- 在wordpress文件夹下创建docker-compose.yml的脚本
version: '2'
volumes:
wordpress:
db2:
services:
db2:
image: mysql:5.7
restart: always
ports:
- 3307:3306
volumes:
- db2:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=Pa55w.rd
- MYSQL_PASSWORD=Pa55w.rd
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
container_name: db2
app2:
image: wordpress
restart: always
ports:
- 8000:80
links:
- db2
volumes:
- wordpress:/var/www/html
- /data:/var/www/html/data
environment:
- MYSQL_PASSWORD=Pa55w.rd
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
- MYSQL_HOST=db2
container_name: app2
- 执行docker-compose安装wordpress和MySQL
cd /root/wordpress
docker-compose up -d
- 查看运行的容器
docker ps -a
- 登录网页初始化WordPress数据,能看见这个步骤基本上就安装好了。
- 在/root目录下新建一个nextcloud文件夹
- 在nextcloud文件夹下创建docker-compose.yml的脚本
version: '2'
volumes:
nextcloud:
db:
services:
db:
image: mysql:8
restart: always
ports:
- 3308:3306
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=Pa55w.rd
- MYSQL_PASSWORD=Pa55w.rd
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
container_name: db
app:
image: nextcloud
restart: always
ports:
- 8080:80
links:
- db
volumes:
- nextcloud:/var/www/html
- /data:/var/www/html/data
environment:
- MYSQL_PASSWORD=Pa55w.rd
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
container_name: app
- 执行docker-compose安装nextcloud和MySQL
cd /root/nextcloud
docker-compose up -d
- 查看运行的容器
docker ps -a
- 登录网页初始化WordPress数据,能看见这个步骤基本上就安装好了。
四、Nginx代理转发WordPress
- 在进入/etc/nginx/conf.d/下新建一个proxy.conf的文件
- 配置文件内容如下:
server {
listen 80;
server_name wordpress.contoso.com;
location / {
proxy_pass http://172.16.0.50:8000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_hide_header X-Powered-By;
}
}
- 还需要修改WordPress下wp-config.php
define('WP_HOME','http://wordpress.contoso.com' );
define('WP_SITEURL','http://wordpress.contoso.com');
- 然后在浏览器访问wordpress.contoso.com是否访问正常。
- 多域名访问,这个还没有测试,以后有需要可以试试
$domain = array("www.abc.com", "www.bbs.com", "www.bcd.com");
if(in_array($_SERVER['HTTP_HOST'], $domain)){ define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST']); define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);}
五、Nginx代理转发nextcloud
- 在进入/etc/nginx/conf.d/
- 在原来的基础上新加一段配置
#配置nextcloud
server {
listen 80;
server_name nextcloud.contoso.com;
location / {
proxy_pass http://172.16.0.50:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_hide_header X-Powered-By;
}
}
#配置WordPress
server {
listen 80;
server_name wordpress.contoso.com;
#return 301 https://domain.com$request_uri;
location / {
proxy_pass http://172.16.0.50:8000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_hide_header X-Powered-By;
}
}
- 在浏览器上输入nextcloud.contoso.com会出现以下错误
- 这时需要在config.php里的trusted_domains下的内容加上nextcloud.contoso.com
root@5e842171750f:/var/www/html/config# vim config.php
<?php
$CONFIG = array (
'htaccess.RewriteBase' => '/',
'memcache.local' => '\\OC\\Memcache\\APCu',
'apps_paths' =>
array (
0 =>
array (
'path' => '/var/www/html/apps',
'url' => '/apps',
'writable' => false,
),
1 =>
array (
'path' => '/var/www/html/custom_apps',
'url' => '/custom_apps',
'writable' => true,
),
),
'instanceid' => 'ockh1311ol39',
'passwordsalt' => 'h0ifH/9tQWCjCBXc8SUkVkWEIIW5Hq',
'secret' => '/Gu+GDSkwvjDFKxxzCd4B0MW/j7QbhKKNIpLjfdEoZuLu553',
'trusted_domains' =>
array (
0 => 'localhost',
1 => '172.16.0.50',
2 => 'nextcloud.contoso.com',
),
'datadirectory' => '/var/www/html/data',
'dbtype' => 'mysql',
'version' => '27.0.0.8',
'overwrite.cli.url' => 'http://172.16.0.50',
'dbname' => 'nextcloud',
'dbhost' => 'db',
'dbport' => '',
'dbtableprefix' => 'oc_',
'mysql.utf8mb4' => true,
'dbuser' => 'nextcloud',
'dbpassword' => 'Pa55w.rd',
'installed' => true,
);
- 一切设置妥当后打开浏览器访问Wordpress和nextcloud网页。
总结:
- Wordpress本身的配置要注意配置文件中的define('WP_HOME','http://wordpress.contoso.com' );define('WP_SITEURL','http://wordpress.contoso.com');这2个参数。
- nextcloud看起来友好一些,只需要在trusted_domains下添加授信的域名即可。
- docker安装应用时尽量不使用重复有冲突的端口。