docker 私有化部署

后端开发语言:php

后端开发框架:yii2

前端开发语言: react

环境要求:

服务器一台:【配置】

系统:Linux Centos 7.9

cpu:8核

内存:16G

硬盘:200G

资源服务器:阿里云【使用公司账号】

服务器4台:(mysql,redis,api和web端,ftp)【最低配置】

系统:Linux Centos 7.9

cpu:4核

内存:8G

硬盘:200G

资源服务器:需本地搭建FTP 服务

shell脚本文件说明:【DockerScript: docker 环境安装脚本

1.docker 环境安装脚本【先安装Python3】

2.ftp 服务器安装脚本【配置文件conf】

安装过程:

1.每台服务器都要进行 docker环境安装,先执行docker安装脚本shell【ftp服务器需要执行 ftp-install脚本】

2.服务器导入 相关环境 docker 镜像【注意:阿里云镜像下载不下来,则使用 dockerHub 镜像进行拉取】

3.镜像上传完成后,docker logout 退出自己账号

4.上传 相关docker-compose.yam 文件 和配置文件 压缩包,本地服务器解压

5.修改 docker-compose.yam 的配置参数,挂载路径,host,环境变量等相关配置【msyql和redis 需先执行 相关shell 脚本,进行配置文件复制,数据持久化】

6.执行 docker-compose.yam,容器镜像安装完成

#容器映射端口:
- "8080:80" #apif
- "8081:80" #apib
- "80:80" #pc端端口
- "81:80" #admin端端口
- "82:80" #pad端端口
- "83:80" #h5端端口
- "84:80" #tv端端口
- "6379:6379" #Redis 端口
- "3306:3306" #mysql 端口

7.数据库文件导入:

#导入数据库
##把sql 复制到容器里面
docker cp ./woc_school_nwpu.sql mysql:/
##进入MySQL 容器
mysql -u root -proot
#修改root密码
mysql > use mysql;
mysql > update mysql.user set authentication_string = password("123456") where user="root";
mysql > flush privileges;
#新建数据库
mysql > CREATE DATABASE IF NOT EXISTS woc_school DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;
mysql > use woc_school;
#然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql > source /woc_school.sql;

#清空所有数据库表【谨慎操作】
select CONCAT('truncate TABLE ',table_schema,'.',TABLE_NAME, ';') from INFORMATION_SCHEMA.TABLES where  table_schema in ('dbname')
#导出sql
 mysqldump -uroot -p common_site bl_site > bl_site.sql

8.代码,sql相关:

通用:【数据库初始化】

1.ip白名单限制【去掉白名单验证】
2.oss 静态资源防盗链 ,白名单添加
3.代码,param.php 配置修改:
[
    1)环境改成prod,关掉debug 【index.php 】
    2)是否使用ftp上传模式
    3)mysql,redis 配置都改用 本地服务器配置
    4)param-local.php 复制正式服配置
    
]
4.文件权限【web/upload 权限777,runtime/权限】
chmod -R 777 apib/web/upload/
chmod -R 777 apif/runtime/
chmod -R 777 apib/runtime/
chmod -R 777 console/runtime/
rm -rf composer.lock
composer install
5.代码加密【自定义HOST】
6.数据库 初始化【需要新建站点】
7.定时任务配置
8.nohup 配置
9.ftp 上传模式 UploadForm.php 去掉最大上传限制

不使用阿里云服务的部署:

1.手机号验证码登录,改成手机号+学号登录
2.去掉直播回放相关功能
3.params.php去掉相关 oss配置【账号密码信息】

9.上传代码【前后端代码服务器 需,上传加密过后的 代码压缩包,解压后 放到nginx 容器挂载的目录下】

10.容器相关注意:

nginx_php 容器:【vim /etc/nginx/sites-enabled/apif.conf】
(1) 进入容器内 更改 nginx 和 php.ini 的配置 【注意重启nginx 和 php-fpm,重启docker 容器】(通用)
注意:【后端服务器】
(1)定时任务配置
(2)nohup 命令配置 /etc/init.d/nohup.sh
(3)ftp 大文件上传配置
(4)源代码加密扩展开启

redis和mysql容器:
(1)注意数据持久化,数据备份功能【进行 重启容器,重启docker,重启服务器 测试数据持久性】

ftp-nginx 对外访问容器:
(1)注意防盗链开启


注意:最后 清除docker 登录信息【rm -rf /root/.docker/config.json】,重启 服务器,验证容器运行状态 和 数据

注意:POST 和 DELETE 请求 被限制时 web/index.php 要添加以下配置,转发请求;apif/main.php 和 apib/main.php 新增 X-Client-Action 【跨域规则设置】

apib/web/index.php
//POST 和 DELETE 请求 被限制时,根据header 里面的 X-Client-Action 参数,重置请求方式
$httpActionHeader = isset($_SERVER['HTTP_X_CLIENT_ACTION']) ? strtoupper($_SERVER['HTTP_X_CLIENT_ACTION']) : '';
if(in_array($httpActionHeader, ['PUT', 'DELETE'])) {
    $_SERVER['REQUEST_METHOD'] = $httpActionHeader;
}
unset($_SERVER['HTTP_X_CLIENT_ACTION']);

Swoole Compiler 自定义信息加密验证:

//Swoole Compiler 自定义信息加密验证
exec('cat /etc/hosts |grep -C 0 "dockerhost"',$output);
$swoole = swoole_get_license();
if ($output && trim(explode('dockerhost',$output[0])[0]) == $swoole['imnc']['dockerhost']){
    (new yii\web\Application($config))->run();
}else{
    echo 'host 不合法';die;
}

遇到的问题及解决方案:

MySQL内网连接慢问题:

## my.conf
#禁用DNS docker MySQL连接慢问题解决[内网]
skip-name-resolve

php源码加密问题:Segmentation fault (core dumped)

加密 后 php 执行加密文件 报 Segmentation fault (core dumped)
解决方案:
重新下载 swoole_loader.so 文件

mysql 报错:Access denied for user ‘root‘@‘localhost‘ (using password: YES):

1.修改/data/mysql/my.cnf文件,添加:skip-grant-tables
[mysqld]
skip-host-cache
skip-name-resolve
skip-grant-tables
2.退出,重启mysql容器
docker restart mysql
3.再次进入容器mysql -uroot -p进入mysql后
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

mysql> update mysql.user set authentication_string = password("root1234") where user="root";
Query OK, 2 rows affected, 1 warning (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 1

mysql> exit
4.删除/etc/mysql/conf.d/docker.cnf文件中添加的skip-grant-tables,在重启容器

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要将Docker仓库私有化部署,你可以考虑使用Docker Registry来实现。Docker Registry是一个存储、分发和管理Docker镜像的服务器端应用程序。 以下是一些步骤来部署私有的Docker Registry: 1. 安装Docker Registry:首先,在你想要部署Docker Registry的服务器上安装Docker。然后,使用以下命令来拉取并运行官方的Docker Registry镜像: ``` docker run -d -p 5000:5000 --restart=always --name registry registry:2 ``` 这将在端口5000上启动一个私有的Docker Registry。 2. 配置防火墙规则:如果你的服务器上有防火墙,确保允许通过5000端口的流量。 3. 配置TLS证书(可选):如果你希望通过HTTPS访问私有的Docker Registry,你需要为Registry配置TLS证书。你可以使用自签名证书或购买一个有效的证书。将证书和私钥放置在适当的位置,并在Docker Registry的启动命令中指定证书路径。 4. 配置客户端:在需要使用私有Docker Registry的机器上,你需要配置Docker客户端以允许与私有Registry通信。编辑或创建`/etc/docker/daemon.json`文件,并添加以下内容: ``` { "insecure-registries": ["your-registry-domain:5000"] } ``` 将`your-registry-domain`替换为你的Docker Registry的域名或IP地址。 5. 重启Docker服务:在配置完客户端后,重启Docker服务以使更改生效: ``` systemctl restart docker ``` 6. 推送和拉取镜像:现在,你可以使用`docker push`和`docker pull`命令将镜像推送到和从私有Docker Registry拉取镜像。 这样,你就成功地将Docker仓库私有化部署了。请注意,这只是一个基本的示例,你可以根据自己的需求进行更高级的配置和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猪@笨笨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值