大家好,又见面了,我是你们的朋友全栈君。
配置服务器的登录
一般不要把root用户给其他人使用,而是创建一个普通用户账号,例如我现在创建一个用户名叫做“laowang”的账号,并且配置它的登录密码。
为了服务器的安全性,root用户登录配置成秘钥登录
安装Docker
我的是阿里云服务器,操作系统为centos7
1.添加yum源
#EPEL (Extra Packages for Enterprise Linux)是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux.使用很简单:1. 首先需要安装一个叫”epel-release”的软件包,这个软件包会自动配置yum的软件仓库。当然你也可以不安装这个包,自己配置软件仓库也是一样的。
# yum install epel-release –y
#作用:清除YUM缓存。yum 会把下载的软件包和header存储在cache中,而不自动删除。如果觉得占用磁盘空间,可以使用yum clean指令进行清除,更精确 的用法是yum clean headers清除header,yum clean packages清除下载的rpm包,yum clean all一全部清除。
# yum clean all
#yum list是列出所有可安装的软件包列表,包含已安装和未安装的
# yum list
2.安装并运行Docker
# yum install docker-io –y
# systemctl start docker
3.检查安装结果,出现下图结果证明安装成功
# docker info
查看docker版本
docker version
docker info
启动docker
sudo service docker start
设置随系统启动
sudo chkconfig docker on
安装Docker Compose(当然,这个不是必须的,但是有它会用的更爽)
创建部署项目需要的容器
1.新建用于存放项目的目录
2.在新建的项目文件夹内添加以下以下两个文件,这两个文件不是拷贝过去就能用的,需要改一些参数,具体改哪些参数,以及这两个文件的具体内容参考我另外一篇文章https://blog.csdn.net/aimashi620/article/details/89002410
这个时候如果直接执行docker-compose build 和docker-compose up -d 会报如下错误,这是因为网络环境还没配置好
打开docker-compose.yml文件我们可以看到了使用名为master的网络,而我们执行docker network ls可以发现,我们并没有叫做master这个网络环境
这个时候我们就要创建名为master的网络,当然这个名字不是固定的。创建网络的时候可以指定很多参数,具体参数参照官方文档https://docs.docker.com/engine/reference/commandline/network_create/
这个时候再执行docker-compose up -d不会报错了,并且执行docker-compose logs命令也能看到项目启动成功。然后在宿主机通过curl命令进行访问接口,访问成功,到这一步可以说明项目已经部署成功了,但是端口映射,nginx,数据库等等其他服务,下面继续
部署Mysql
1.在服务器上新建一个用于存放mysql服务的目录
2.把一下两个文件拷到该目录下,并在目录中新建一个init.sql文件
Dockerfile
FROM mysql:5.7
ADD ./init.sql /docker-entrypoint-initdb.d/
RUN chmod a+x $AUTO_RUN_DIR/$INSTALL_DB_SQL
docker-compose.yml
version: '2'
networks:
default:
external:
name: master
services:
mysql_master:
image: mysql_master
container_name: mysql_master
restart: always
build: .
ports:
- 3306
volumes:
- ./data:/var/lib/mysql
- ./conf:/etc/mysql/conf.d
- /home/dump:/home/dump
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
- MYSQL_USER=dba
- MYSQL_PASSWORD=123
- TZ=Asia/Shanghai
- LANG=C.UTF-8
3.在服务器上进入到该目录,执行docker-compose build命令
如果报以下错误:Cannot open self /usr/local/bin/docker-compose or archive /usr/local/bin/docker-compose.pkg
这是因为官方文档中描述的方法(如下),安装时curl下载下来的文件是不完整的(可以把你从浏览器上下载下拉的docker-compose-Linux-x86_64文件的大小与你curl下载下拉的文件的大小做对比,如下图),而且没有给出任何错误信息,这可能是https的问题。
curl -L https://github.com/docker/compose/releases/download/1.14.0-rc2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
解决办法:
进入下面的网址下载目前的最新版:
https://github.com/docker/compose/releases/tag/1.14.0-rc2
网页拉到最下面,下载:
docker-compose-Linux-x86_64
然后将文件上传到 /usr/local/bin/ 文件夹下,然后将其重命名为docker-compose,修改此文件的权限,增加可执行:chmod +x /usr/local/bin/docker-compose
然后再运行
[root@fd240 bin]# docker-compose version
docker-compose version 1.14.0-rc2, build 24dae73
docker-py version: 2.3.0
CPython version: 2.7.13
OpenSSL version: OpenSSL 1.0.1t 3 May 2016
可以看到已经没有问题了(如下图)。
4.启动mysql
5.进入mysql,账号密码在上面的docker-compose.yml中可以找到,我这里使用root账号登录,密码为空,进去创建一个数据库之后就导入数据。
docker exec -it 容器id bash
SELECT DISTINCT CONCAT('User: ''',USER,'''@''',HOST,''';') AS QUERY FROM mysql.user;
上图可以发现有两个root用户,那么如何配置root用户可以远程连接呢(根据root的密码进行区分两个root)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password123' WITH GRANT OPTION;
flush privileges;
部署Redis
在服务器上新建一个用于部署redis的文件夹
在此文件夹下添加一下三个文件
redis.conf
bind 0.0.0.0
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
################################# GENERAL #####################################
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 2
################################ SNAPSHOTTING ################################
ave 1 1
#save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
################################# REPLICATION #################################
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
################################## SECURITY ###################################
requirepass redis
################################### LIMITS ####################################
maxclients 10000
############################## APPEND ONLY MODE ###############################
appendonly yes
appendfilename "appendonly.aof"
# appendfsync always
appendfsync everysec
# appendfsync no
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
################################ LUA SCRIPTING ###############################
lua-time-limit 5000
################################ REDIS CLUSTER ###############################
cluster-enabled no
################################## SLOW LOG ###################################
slowlog-log-slower-than 10000
slowlog-max-len 128
################################ LATENCY MONITOR ##############################
latency-monitor-threshold 0
############################# EVENT NOTIFICATION ##############################
notify-keyspace-events ""
############################### ADVANCED CONFIG ###############################
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
Dockerfile
#基础镜像
FROM redis
#将自定义conf文件拷入
COPY ./redis.conf /etc/redis/redis.conf
#修复时区
#RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
# Redis客户端连接端口
EXPOSE 6379
#使用自定义conf启动
CMD [ "redis-server", "/etc/redis/redis.conf" ]
docker-compose.yml
version: '2'
services:
redis:
image: redis
container_name: redis
restart: always
ports:
- 6379:6379
environment:
- appendonly=yes # 打开redis密码设置
- requirepass=123456 # 设置redis密码
volumes:
- ./redis.conf:/etc/redis/redis.conf
# command: redis-server /etc/redis/redis.conf
networks:
default:
external:
name: master
在服务器进入到当前目录,执行docker-compose build命令和docker-compose up -d命令
检查redis是否启动成功
部署Nginx
1.在服务器上新建一个目录用于部署nginx
2.把以下三个文件拷贝到该目录下,并在该目录下新建一个cert文件夹
nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
keepalive_timeout 400;
client_header_timeout 10m;
client_body_timeout 10m;
client_max_body_size 512m;
client_header_buffer_size 16k;
large_client_header_buffers 4 16k;
proxy_connect_timeout 300;
proxy_read_timeout 300;
proxy_send_timeout 300;
proxy_buffer_size 64k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
sendfile on;
#tcp_nopush on;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
Dockerfile
FROM nginx
RUN mkdir -p /var/www
COPY ./cert/ /etc/nginx/cert/
EXPOSE 80 443
CMD ["nginx","-g","daemon off;"]
docker-compose.yml
version: '2'
networks:
default:
external:
name: master
services:
nginx:
image: nginx
container_name: nginx
restart: always
build: .
ports:
- "80:80"
- "443:443"
volumes:
- ./conf:/etc/nginx/conf.d
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./web:/var/www
environment:
TZ: Asia/Shanghai
3.从服务器进入到该目录,执行docker-compose build命令和docker-compose up -d命令
nginx启动虽然没有报错,但是我们会发现nginx访问不了,我们可以进入到nginx容器,执行nginx -t命令检测一下我们的配置文件,会报以下错误
这里是一个坑,因为我是在window下使用notpad++编辑我这个quality_training.conf文件的,保存的时候自动使用了一种错误的编码格式,其实我们应该使用“无BOM格式编码”
然后我改为无BOM格式编码之后再执行一次nginx -t命令,报以下错误,这是因为我们配置了443端口的server,这是https对于的server,配置这个server是需要配置ssl证书的,要不你就配置证书(可以参考我的另外一篇文章https://blog.csdn.net/aimashi620/article/details/83056927),要不你就把这个server删掉。
在我配置证书的时候还报了“找不到证书”这个错误,这个时候可以重启容器再试一次就成功了(如果容器一直在重启中,执行docker rm -f 容器id,把容器删除掉再重新docker-compose build和docker-compose up -d)
域名配置
1.登录阿里云控制台,进入域名管理控制台
2.点击解析
3.添加一条记录,把域名解析到我们新买的服务器上
配置SSL证书
参考我的另外一篇文章https://blog.csdn.net/aimashi620/article/details/83056927
服务链接Mysql
直接在服务器上用账号密码能够登录mysql,服务的mysql配置也没问题,但是访问就是报错。这里就需要注意一个问题了,你在服务器上使用mysql -u root -p 输入的这个密码虽然是可以正常的登录数据库,但是你在项目里配置的jdbc连接的密码可不一定是这一个,项目里配置的那个叫做mysql的远程连接密码,可以同过set password for root@’%’=password(’ 密码 ‘);命令进行设置。
然后把项目里的jdbc密码改成上面用set password for root@’%’=password(’ 密码 ‘);命令设置的密码,然后重新部署一次,访问成功
域名备案
如果域名还没备案是无法进行访问的。查看域名是否已经备案可以通过此连接进行查询http://icp.chinaz.com/gdsxzlg.org.cn
微信小程序想要访问外部链接的配置流程
https://mp.weixin.qq.com/wxopen/devprofile?action=get_profile&token=1049164222&lang=zh_CN
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/150363.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...