# ----------------------
# centos7.8
# ----------------------
yum install -y unzip wget vim curl net-tools telnet lbzip2 lsof redhat-lsb zip unzip git
# ----------------------
# vim
# ----------------------
cat > ~/.vimrc <<EOF
set nobomb
set showmode
set autoindent
set smartindent
set tabstop=4
set shiftwidth=4
set hlsearch
set noignorecase
set fileformats=unix
set backspace=2
set ruler
set nu
set ai!
set incsearch
set cursorline
set paste
EOF
source ~/.vimrc
# ----------------------
# A服務器 免密登錄 B服務器
# ----------------------
1. A創建公鑰:
ssh-keygen -t rsa
2. 拷貝公鑰到目標服務器B:
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
# ----------------------
# docker
# ----------------------
yum install -y docker
service docker start
docker images
systemctl enable docker
docker pull redis
docker pull mysql:5.7
# ----------------------
# docker mysql.sh
# ----------------------
#!/bin/bash
root_passwd=123456
master_port=33061
master_name=mysql_33061
slave_port=33062
slave_name=mysql_33062
# docker容器IP段
grant_ip="172.17.0.%"
docker run \
--name ${master_name} \
-h ${master_name} \
-p ${master_port}:3306 \
-v /data/${master_name}/conf:/etc/mysql/conf.d \
-v /data/${master_name}/data:/var/lib/mysql \
-v /data/${master_name}/logs:/var/log/mysql \
-v /etc/timezone:/etc/timezone \
-v /etc/localtime:/etc/localtime \
-e MYSQL_ROOT_PASSWORD=${root_passwd} \
--restart always \
-d mysql:5.7
docker run \
--name ${slave_name} \
-h ${slave_name} \
-p ${slave_port}:3306 \
-v /data/${slave_name}/conf:/etc/mysql/conf.d \
-v /data/${slave_name}/data:/var/lib/mysql \
-v /data/${slave_name}/logs:/var/log/mysql \
-v /etc/timezone:/etc/timezone \
-v /etc/localtime:/etc/localtime \
-e MYSQL_ROOT_PASSWORD=${root_passwd} \
--link ${master_name}:mysql_master \
--restart always \
-d mysql:5.7
cat > /data/${master_name}/conf/my.cnf << EOF
[mysqld]
server_id=1
log-bin=mysql-bin
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
max_connections=2000
slow-query-log=1
slow-query-log-file=/var/log/mysql/mysql-slow.log
long_query_time=3
log-queries-not-using-indexes
wait_timeout=600
interactive_timeout=600
innodb_log_file_size=512M
max_allowed_packet=20M
EOF
cat > /data/${slave_name}/conf/my.cnf << EOF
[mysqld]
server_id=2
log-bin=mysql-bin
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
log-slave-updates
slave-skip-errors=all
slave-net-timeout=60
max_connections=2000
slow-query-log=1
slow-query-log-file=/var/log/mysql/mysql-slow.log
long_query_time=3
log-queries-not-using-indexes
wait_timeout=600
interactive_timeout=600
innodb_log_file_size=512M
max_allowed_packet=20M
EOF
docker restart ${master_name}
docker restart ${slave_name}
sleep 3s
docker exec -it ${master_name} echo "Asia/shanghai" > /etc/timezone
docker exec -it ${master_name} cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
docker exec -it ${master_name} date
docker exec -it ${slave_name} echo "Asia/shanghai" > /etc/timezone
docker exec -it ${slave_name} cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
docker exec -it ${slave_name} date
docker exec -it ${master_name} mysql -uroot -e "
grant replication slave on *.* to repl@'${grant_ip}' identified by 'Repl1580';
GRANT ALL PRIVILEGES ON *.* TO root@'${grant_ip}' IDENTIFIED BY '${root_passwd}' with grant option;
FLUSH PRIVILEGES;
delete from mysql.user where host = '%' and user = 'root';
select host, user from mysql.user;
"
docker exec -it ${slave_name} mysql -uroot -e "
stop slave;
change master to master_host='mysql_master',master_port=3306,master_user='repl',master_password='Repl1580';
start slave;
show slave status \G;
"
# ----------------------
# docker redis
# ----------------------
#!/bin/bash
passwd=123456
redis_port=16379
redis_name=redis_${redis_port}
docker run \
--name ${redis_name} \
-h ${redis_name} \
-p ${redis_port}:6379 \
-v /data/${redis_name}/data:/data \
-v /etc/timezone:/etc/timezone \
-v /etc/localtime:/etc/localtime \
--restart always \
-d redis \
redis-server --appendonly yes --requirepass ${passwd}
sleep 3s
docker exec -it ${redis_name} echo "Asia/shanghai" > /etc/timezone
docker exec -it ${redis_name} cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
docker exec -it ${redis_name} date
# ----------------------
# nginx
# ----------------------
yum install -y yum-utils
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
yum install -y openresty
cat > /usr/lib/systemd/system/nginx.service <<EOF
[Service]
Type=forking
PIDFile=/usr/local/openresty/nginx/logs/nginx.pid
ExecStartPre=/usr/local/openresty/nginx/sbin/nginx -t
ExecStart=/usr/local/openresty/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP \$MAINPID
ExecStop=/bin/kill -s QUIT \$MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
systemctl enable nginx.service
systemctl start nginx.service
mkdir /usr/local/openresty/nginx/conf/vhosts
cat > /usr/local/openresty/nginx/conf/cros.conf <<EOF
add_header Access-Control-Allow-Origin '*' always;
add_header Access-Control-Allow-Methods 'GET,POST,OPTIONS,PUT' always;
add_header Access-Control-Allow-Headers 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,x-auth-token,Accept,Referer,X-Request-Sign,X-Request-Source,X-Request-Timestamp' always;
add_header Access-Control-Allow-Credentials true always;
add_header Access-Control-Max-Age 1728000 always;
if ($request_method = 'OPTIONS') {
return 204;
}
EOF
cat > /usr/local/openresty/nginx/conf/proxy.conf <<EOF
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Host \$host:\$server_port;
proxy_set_header X-Request-Id \$request_id;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection "upgrade";
client_max_body_size 50m;
client_body_buffer_size 256k;
proxy_connect_timeout 30;
proxy_send_timeout 30;
proxy_read_timeout 60;
proxy_buffer_size 64k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_max_temp_file_size 128m;
EOF
cat > /usr/local/openresty/nginx/conf/html.conf <<EOF
location ~ .*\.(js|css) {
expires 12h;
}
location ~ .*\.(ico|jpg|jpeg|gif|png|swf|flv) {
expires 7d;
}
location = /favicon.ico {
log_not_found off;
}
EOF
cat > /usr/local/openresty/nginx/conf/error.conf <<EOF
error_page 400 401 402 403 404 405 /40x.html;
location = /40x.html {
root html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ ^/\.(svn|git|htaccess|project) {
deny all;
}
EOF
cat > /usr/local/openresty/nginx/conf/nginx.conf <<EOF
user nobody;
worker_processes 1;
pid logs/nginx.pid;
events {
use epoll;
worker_connections 10240;
}
http {
include 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" "\$request_id"';
access_log /dev/null;
error_log logs/error.log;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
gzip on;
gzip_vary on;
gzip_static on;
gzip_proxied any;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 5;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
include proxy.conf;
include vhosts/*.conf;
}
EOF
cat > /usr/local/openresty/nginx/conf/vhosts/default.conf <<EOF
server {
listen 80;
server_name _;
root html;
index index.html;
location / {
#try_files \$uri \$uri/ /index.html last;
#proxy_pass http://127.0.0.1:9000;
}
include html.conf;
include error.conf;
}
EOF
# ----------------------
# go
# ----------------------
cd /usr/local
wget https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz
tar xf go1.11.2.linux-amd64.tar.gz && rm -f go1.11.2.linux-amd64.tar.gz
cat >> /etc/profile <<EOF
export GOROOT=/usr/local/go
export GOPATH=/home/go
export PATH=\$PATH:\$GOROOT/bin:\$GOPATH/bin
EOF
source /etc/profile
go get github.com/skip2/go-qrcode
go get github.com/bitly/go-simplejson
go get gopkg.in/yaml.v2
go get github.com/go-sql-driver/mysql
go get github.com/go-xorm/xorm
go get github.com/aliyun/aliyun-oss-go-sdk/oss
go get github.com/go-redis/redis
go get github.com/gin-gonic/gin
go get github.com/fvbock/endless
go get github.com/mozillazg/go-slugify
go get github.com/astaxie/beego
go get github.com/beego/bee
go get github.com/ramya-rao-a/go-outline
go get github.com/acroca/go-symbols
go get golang.org/x/tools/cmd/guru
go get golang.org/x/tools/cmd/gorename
go get golang.org/x/image/font
go get github.com/golang/freetype
go get github.com/josharian/impl
go get github.com/rogpeppe/godef
go get github.com/sqs/goreturns
go get github.com/cweill/gotests/gotests
go get github.com/lukehoban/go-find-references
go get github.com/disintegration/imaging
go get github.com/mojocn/base64Captcha
cd $GOPATH/src
mkdir -p golang.org/x && cd golang.org/x
git clone https://github.com/golang/tools.git tools
git clone https://github.com/golang/lint lint
git clone https://github.com/golang/image image
git clone https://github.com/golang/protobuf protobuf
git clone https://github.com/golang/sys sys
# ----------------------
# node
# ----------------------
cd /usr/local
wget https://nodejs.org/dist/v10.13.0/node-v10.13.0-linux-x64.tar.xz
tar xf node-v10.13.0-linux-x64.tar.xz && rm -f node-v10.13.0-linux-x64.tar.xz
mv node-v10.13.0-linux-x64 node
cat >> /etc/profile <<EOF
PATH=\$PATH:/usr/local/node/bin
export PATH
EOF
source /etc/profile
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm i -g pm2