Linux 环境安装

centos7

# 更新yum
yum update -y

0. 防火墙 firewalld

新入的JD云服务器,发现防火墙默认是关闭的。

# 查看防火墙状态
systemctl status firewalld # 启动
systemctl start firewalld
# 停止
systemctl disable firewalld
# 禁用
systemctl stop firewalld # 开机时启用
systemctl enable firewalld.service
# 开机时禁用
systemctl disable firewalld.service # 查看所有打开的端口
firewall-cmd --zone=public --list-ports
# 放开一个端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 关闭一个端口
firewall-cmd --zone= public --remove-port=80/tcp --permanent
# 重载规则
firewall-cmd --reload

1. 使用 nvm 安装 Node

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

# 激活nvm
source ~/.nvm/nvm.sh # 安装node
nvm install node # 切换到该版本
nvm use node

使用 nvm 管理 node 版本

# 安装某版本 比如 4.2.2
nvm install 4.2.2 # 列出远程服务器上所有可用版本
nvm ls-remote # 在不同版本间切换
nvm use 4.2.2 #安装最新版 Node
nvm install node #切换到最新版
nvm use node #列出已安装实例
nvm ls #安装最新不稳定版本
nvm install unstable

2. 安装 nginx

# 新环境需要gcc gcc-c++
yum install -y gcc gcc-c++ make # 下载 openssl 以支持 ssl 功能
# http://www.openssl.org/
wget https://www.openssl.org/source/openssl-1.1.1.tar.gz # 下载 zlib 支持 gzip
# http://www.zlib.net/
wget http://www.zlib.net/zlib-1.2.11.tar.gz # 下载 pcre 支持 rewrite
# http://www.pcre.org/
wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz # 下载 nginx
# http://nginx.org/en/download.html
wget http://nginx.org/download/nginx-1.16.0.tar.gz # 解压
tar zxvf openssl-1.1.1.tar.gz
tar zxvf zlib-1.2.11.tar.gz
tar zxvf pcre-8.43.tar.gz
tar zxvf nginx-1.16.0.tar.gz # 安装PCRE库
cd /usr/local/pcre-8.43
./configure
make && make install # 安装SSL库
cd /usr/local/openssl-1.1.1
./config
make && make install # 安装zlib库
cd /usr/local/zlib-1.2.11
./configure
make && make install # 将nginx目录重命名
mv nginx-1.16.0 nginx; cd nginx/ # 安装nginx
./configure --user=nobody --group=nobody --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-http_sub_module --with-http_ssl_module --with-pcre=/usr/local/pcre-8.43 --with-zlib=/usr/local/zlib-1.2.11 --with-openssl=/usr/local/openssl-1.1.1 make && make install # 配置开机启动
cd /lib/systemd/system
vim nginx.service [Unit]
Description=nginx
After=network.target [Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx reload
ExecStop=/usr/local/nginx/sbin/nginx quit
PrivateTmp=true [Install]
WantedBy=multi-user.target # 保存退出
systemctl enable nginx.service # 常用命令
systemctl start nginx.service # 启动,也可以使用sbin/nginx启动
systemctl stop nginx.service # 结束nginx
systemctl restart nginx.service # 重启,可使用sbin/nginx -s reload # 配置文件
vim /usr/local/nginx/conf/nginx.conf # 启动服务
# 启动
/usr/local/nginx/sbin/nginx
# 重启
/usr/local/nginx/sbin/nginx -s reload
# 停止
/usr/local/nginx/sbin/nginx -s quit
/usr/local/nginx/sbin/nginx -s stop
# 查看运行状态
ps -ef|grep nginx

修改配置文件

user  root;
worker_processes 1; #error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; #pid logs/nginx.pid; events {
worker_connections 1024;
} 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"'; access_log off; sendfile on;
#tcp_nopush on; #keepalive_timeout 0;
keepalive_timeout 65; # 开启gzip
gzip on;
gzip_buffers 32 4k;
gzip_comp_level 4;
gzip_min_length 400;
gzip_types text/plain application/xml application/javascript;
gzip_vary on; server {
listen 80;
server_name www.abc.com; #charset koi8-r; #access_log logs/host.access.log main; location / {
root /home/www/civ;
index index.html index.htm;
try_files $uri $uri/ /index.html?$query_string;
} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
} } # ssl
server {
listen 443;
server_name test.abc.com;
ssl on;
ssl_certificate /etc/ssl/server.crt;
ssl_certificate_key /etc/ssl/server.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on; location / {
root /home/www/test;
index index.html;
}
} # 80 sub site
server {
listen 80;
server_name sub.abc.com; location / {
root /home/www/sub;
index index.html;
try_files $uri $uri/ /index.html?$query_string;
}
} # proxy go-service
server {
listen 80;
server_name api.abc.com; charset utf-8;
access_log /home/www/go/src/api.abc.com.access.log; location /(css|js|fonts|img)/ {
access_log off;
expires 1d;
root "/home/www/go/src/static";
try_files $uri @backend;
} location / {
try_files /_not_exists_ @backend;
} location @backend {
proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $http_host; proxy_pass http://127.0.0.1:8080;
}
}
}

报错:

# 1. 如果启动遇到下面的错误
[root@JD nginx]# /usr/local/nginx/sbin/nginx
nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (2: No such file or directory)
2019/07/30 16:00:41 [emerg] 8243#0: open() "/usr/local/nginx/logs/access.log" failed (2: No such file or directory) # 可能是没有logs目录导致
# 在nginx目录下新建一个logs文件夹就可以了
mkdir logs

3. Docker环境安装

yum install docker

# 启动 Docker 的守护进程
service docker start # 系统启动时运行
chkconfig docker on # 查看当前正在运行的容器
docker ps -a
# 创建容器
docker create
# 创建容器并启动
docker run
# 退出容器
ctrl+d
# 启动容器
docker start
# 停止容器
docker stop

4. 安装 vsftpd

4.1 常规配置 ftp 服务

# 安装 vsftpd 和 ftp
yum install -y vsftpd
yum install ftp # 为了在服务器测试ftp连接 # 启动ftp
service vsftpd start
# 设置开机启动
systemctl enable vsftpd.service
# 查看vsftpd服务是否已开启
ps -e|grep vsftpd
# 查看vsftpd监听端口
netstat -ntpl | grep vsftpd # 开启防火墙
# 可以通过服务器安全组设置入站规则开启21端口
# 放开21端口
firewall-cmd --zone=public --add-port=21/tcp --permanent
# 永久开放 ftp 服務
firewall-cmd --add-service=ftp --permanent
# 关闭ftp服务
firewall-cmd --remove-service=ftp --permanent
# 重启ftp服务
service vsftpd restart
# 或者
systemctl restart vsftpd # vsftpd 的配置目录为 /etc/vsftpd
vi /etc/vsftpd/vsftpd.conf anonymous_enable=NO # 禁止匿名登陆
pam_service_name=vsftpd
userlist_enable=NO
allow_writeable_chroot=YES # 创建用户
useradd -s /sbin/nologin -d /usr/local/web jehorn
passwd jehorn # 给文件夹增加读写权限
chmod o+w /usr/local/web/
# 或者
chmod 775 /usr/local/web/
chmod 777 /usr/local/web/ # 如果需要重新设置用户主目录
usermod -d /usr/local/web/ jehorn
# 删除用户
userdel -rf jehorn
# 变更用户属性
usermod -s /sbin/nologin jehorn (/bin/bash:可以登录shell,/bin/false:禁止登录shell ) # 本地测试ftp服务
ftp localhost
# 输入用户名 密码
# 如果出现以下提示表示配置成功
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

ftp客户端连接:

这里使用xftp6示例:

注意这里不使用被动模式,被动模式需要配置随机端口,这里不再赘述。

4.2 docker 配置 vsftpd

# 拉取镜像
docker pull fauria/vsftpd # 创建vsftpd的container
docker run -d -p 21:21 -p 20:20 -p 21100-21110:21100-21110 -v /usr/local/web:/home/vsftpd -e FTP_USER=root -e FTP_PASS=123456-e PASV_ADDRESS=123.456.789.0 -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 --name vsftpd --restart=always fauria/vsftpd
# -p进行端口绑定映射
# -v进行文件目录的映射 FTP_UESR 和FTP_PASS如果设定了会在container里面的
# /etc/vsftpd/virtual_users.txt
# PASV_MIN_PORT和PASV_MAX_PORT映射的是被动模式下端口使用范围
# PASV_ADDRESS指的的宿主机地址 # 添加用户
# 进入当前实例
docker exec -i -t vsftpd bash # 新建用户文件夹
mkdir /home/vsftpd/jehorn # 可能会存在没有权限问题
chown -R ftp:ftp /home/vsftpd # 编辑配置文件写入用户跟密码
vi /etc/vsftpd/virtual_users.txt # 把登录的验证信息写入数据库
/usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db # 重启
docker restart vsftpd

5. 安装gitlab

5.1 传统安装方式

# 以下命令还将在系统防火墙中打开HTTP和SSH访问。
sudo yum install -y curl policycoreutils-python openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld # 安装Postfix以发送通知电子邮件
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix # 添加GitLab包存储库
# curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash # 安装GitLab包。将https://gitlab.example.com更改为您要访问GitLab实例的URL。
# sudo EXTERNAL_URL="https://gitlab.example.com" yum install -y gitlab-ee # 由于官方给出的下载地址实在太慢
# 使用 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ 下载
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.1.3-ce.0.el7.x86_64.rpm
rpm -ivh gitlab-ce-12.1.3-ce.0.el7.x86_64.rpm # 修改配置
vim /etc/gitlab/gitlab.rb # 修改url
external_url 'http://gitlab.example.com/'
# :1015
# nginx['redirect_http_to_https'] =true
# nginx['ssl_certificate'] = "/etc/gitlab/ssl/server.crt"
# nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/server.key" # 由于服务器通常已经开启了单独了nginx服务
# 所以需要禁用gitlab内置nginx
# 禁用内置NG
nginx['enable'] = false
# 指定NG的用户名
web_server['external_users'] = ['nginx']
# 添加NG地址到信任列表,我这里就是本机地址
gitlab_rails['trusted_proxies'] = ['127.0.0.1']
# 配置监听网络:tcp
gitlab_workhorse['listen_network'] = "tcp"
# 配置GitLab的地址和端口
gitlab_workhorse['listen_addr'] = "127.0.0.1:8020" # 到这里执行 gitlab-ctl reconfigure 可能会抛出错误,提示 用户nginx不存在
# There was an error running gitlab-ctl reconfigure:
# account[Webserver user and group] (gitlab::web-server line 27) had an error: Mixlib::ShellOut::ShellCommandFailed: group[Webserver user and group] (/opt/gitlab/embedded/cookbooks/cache/cookbooks/package/resources/account.rb line 38) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '3'
# ---- Begin output of ["gpasswd", "-a", "nginx", "gitlab-www"] ----
# STDOUT:
# STDERR: gpasswd: user 'nginx' does not exist
# ---- End output of ["gpasswd", "-a", "nginx", "gitlab-www"] ----
# Ran ["gpasswd", "-a", "nginx", "gitlab-www"] returned 3
# 可以新增一个用户
adduser nginx
# 然后将nginx.conf的user改为nginx后重启服务即可 # 应用配置
gitlab-ctl reconfigure # 修改外部nginx配置
server {
listen 443;
server_name gitlab.example.com; ssl on;
ssl_certificate /etc/ssl/gitlab-cert19080152759628cbb70f4f.crt;
ssl_certificate_key /etc/ssl/gitlab-cert19080152759628cbb70f4f.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on; location / {
proxy_pass http://127.0.0.1:8020;
} }
# 重启nginx服务
/usr/local/nginx/sbin/nginx -s reload

然后从浏览器打开 https://gitlab.example.com/,会提示你输入密码,输入完成后使用root+刚才输入的密码登录即可。

gitlab常用命令:

gitlab-ctl start                    # 启动所有 gitlab 组件;
gitlab-ctl stop                    # 停止所有 gitlab 组件;
gitlab-ctl restart                # 重启所有 gitlab 组件;
gitlab-ctl status                 # 查看服务状态;
gitlab-ctl reconfigure         # 启动服务;
vim /etc/gitlab/gitlab.rb      # 修改默认的配置文件;
gitlab-rake gitlab:check SANITIZE=true --trace    # 检查gitlab;
gitlab-ctl tail                        # 查看日志;

配置 gitlab 邮箱 postfix:

查看各种邮箱配置可以参考 https://docs.gitlab.com/omnibus/settings/smtp.html#example-configurations

# 查看 postfix 状态
systemctl status postfix # 这是设置outlook邮箱的示例
vim /etc/gitlab/gitlab.rb
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.office365.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "root@outlook.com"
gitlab_rails['smtp_password'] = "12345six"
gitlab_rails['smtp_domain'] = "outlook.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_openssl_verify_mode'] = 'peer' gitlab_rails['gitlab_email_from'] = 'jehornguu@outlook.com'
gitlab_rails['gitlab_email_display_name'] = 'Jehorn Git'
gitlab_rails['gitlab_email_reply_to'] = 'jehornguu@outlook.com' # 重启配置
gitlab-ctl reconfigure # 测试邮件服务
gitlab-rails console
Notify.test_email('example@163.com', '邮件标题_test', '邮件正文_test').deliver_now # 出现以下表示成功
# irb(main):002:0> Notify.test_email('example@163.com', '_test', '_test').deliver_now
Notify#test_email: processed outbound mail in 0.7ms
Sent mail to example@163.com (1263.8ms)
Date: Thu, 01 Aug 2019 16:30:12 +0800
From: Jehorn Git <example@outlook.com>
Reply-To: Jehorn Git <example@outlook.com>
To: example@163.com
Message-ID: <5d42a31478d32_30e3ff7990cf9b011813@JD.mail>
Subject: _test
Mime-Version: 1.0
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
Auto-Submitted: auto-generated
X-Auto-Response-Suppress: All <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>_test</p></body></html> => #<Mail::Message:70332342294800, Multipart: false, Headers: <Date: Thu, 01 Aug 2019 16:30:12 +0800>, <From: Jehorn Git <example@outlook.com>>, <Reply-To: Jehorn Git <example@outlook.com>>, <To: example@163.com>, <Message-ID: <5d42a31478d32_30e3ff7990cf9b011813@JD.mail>>, <Subject: _test>, <Mime-Version: 1.0>, <Content-Type: text/html; charset=UTF-8>, <Content-Transfer-Encoding: 7bit>, <Auto-Submitted: auto-generated>, <X-Auto-Response-Suppress: All>>

*如果邮件发送失败,看一下是不是邮箱没有开启POP、smtp服务。

*遇到了登录422的问题,且尚无解决办法。

5.2 docker安装方式

# 查询gitlab镜像
docker search gitlab # 我们选择稳定版
docker pull gitlab/gitlab-ce # 运行镜像
docker run -d -p 8020:443 -p 8021:80 -p 222:22 -p 587:587 --name gitlab --restart always -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce
# -d:后台运行
# -p:将容器内部端口向外映射
# --name:命名容器名称
# -v:将容器内数据文件夹或者日志、配置等文件夹挂载到宿主机指定目录 # gitlab.rb文件内容默认全是注释
vim /home/gitlab/config/gitlab.rb # 配置http协议所使用的访问地址,不加端口号默认为80
external_url 'https://git.example.com' # 配置ssh协议所使用的访问地址和端口
gitlab_rails['gitlab_ssh_host'] = 'https://git.example.com'
gitlab_rails['gitlab_shell_ssh_port'] = 222 # 此端口是run时22端口映射的222端口:wq #保存配置文件并退出 # 重启gitlab
docker restart gitlab # 由于我是统一一个nginx管理
# 所以在nginx配置代理
server {
listen 443;
server_name gitlab.example.com; ssl on;
ssl_certificate /etc/ssl/gitlab-cert19080152759628cbb70f4f.crt;
ssl_certificate_key /etc/ssl/gitlab-cert19080152759628cbb70f4f.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on; location / {
proxy_pass http://127.0.0.1:8021;
} }
# 重启nginx服务
/usr/local/nginx/sbin/nginx -s reload # 配置邮箱参见5.1
# 配置邮箱后需要进入bash应用配置
docker exec -it gitlab bash
gitlab-ctl reconfigure
gitlab-rails console # console调试 # 注意配置完成后重启docker gitlab
exit
docker restart gitlab

如果出现以下错误:

Error response from daemon: Cannot restart container gitlab: driver failed programming external connectivity on endpoint gitlab (5b2b1b646aea89819e84926057431d119eabd25a0bfe49247b468bde14103367):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8021 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.

基本可以通过重启docker解决.

systemctl restart docker

查看日志:

docker logs -f -t --tail=10 f41c6a557eb6

*跑起来以后内存大概常驻40%(8G物理内存)。

未完待续

最后更新 2019-8-4 03:41:37

Linux 环境安装 Node、nginx、docker、vsftpd、gitlab的更多相关文章

  1. Linux环境安装、卸载Docker

    安装: 1.Docker要求CentOS系统的内核版本高于 3.10 ,通过 uname -r 命令查看你当前的内核版本是否支持安账docker 2.更新yum包:sudo yum update 3. ...

  2. linux环境安装配置nginx

    安装依赖 yum install gcc yum install pcre-devel yum install zlib zlib-devel yum install openssl openssl- ...

  3. LNMP1.3一键安装Linux环境,配置Nginx运行ThinkPHP3.2

    LNMP1.3一键安装Linux环境,配置Nginx运行ThinkPHP3.2 你是否遇见过:安装LNMP1.3环境后,运行ThinkPHP 3.2,只能打开首页,不能访问控制器,报404错误. 按照 ...

  4. Linux环境下对大小写敏感,linux环境升级node

    linux对大小写敏感 在window下可以正常运行的代码,在linux环境下报错,找不到文件,因为window下对大小写不敏感,linux对大小写敏感 linux环境下node升级 1.安装nvm ...

  5. Linux环境安装PostgreSQL-10.1

    转载自:https://www.cnblogs.com/LinBug/p/8082790.html Linux环境安装PostgreSQL-10.1   环境及资源 Linux版本:CentOS re ...

  6. Linux环境安装Nexus

    Linux环境安装Nexus Nexus可以做Maven私服,私服不是Maven的核心概念,它仅仅是一种衍生出来的特殊的Maven仓库.有三种专门的Maven仓库管理软件可以用来帮助大家建立私服: N ...

  7. Linux环境安装.NET运行环境

    Linux环境安装.NET运行环境 Linux环境安装.NET运行环境 1. 构建编译环境: (1) sudo apt-get install build-essential (2) sudo apt ...

  8. Linux环境安装xmapp(PHP-Mysql集成环境)

    xmapp是很多初学者使用的PHP环境集成包,用yum在linux安装的php和mysql版本现在都很低,xmapp可以解决这个问题,下面我们直接进入正题,安装一个php集成环境. 我使用的是vm虚拟 ...

  9. Linux 上安装 Node.js

    Linux 上安装 Node.js 直接使用已编译好的包(在个人阿里云服务器47.100.6.106上安装) Node 官网已经把 linux 下载版本更改为已编译好的版本了,我们可以直接下载解压后使 ...

随机推荐

  1. vue-cli搭建SPA项目

    1. 什么是vue-cli? vue-cli是vue.js的脚手架,用于自动生成vue.js+webpack的项目模板,创建命令如下: vue init webpack xxx 2. 安装vue-cl ...

  2. WinDbg常用命令系列---错误消息显示!error

    !error 这个!error扩展命令解码并显示有关错误值的信息. !error Value [Flags] 参数: Value指定以下错误代码之一:Win32.Winsock.NTSTATUS.Ne ...

  3. 前端微信小程序电影类仿淘票票微信小程序

    需求描述及交互分析设计思路和相关知识点电影界面顶部页签切换效果设计正在热映界面布局设计即将上映界面布局设计电影详情页设计我的界面列表导航设计登录设计 相关知识点(1)swiper滑块视图容器组件,可以 ...

  4. linux 关闭主板上的蜂鸣器声音

    本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/mainboard_speaker_close 在从deepin的 ...

  5. Centos 7 更换为 阿里云 yum 源

    地址: https://opsx.alibaba.com/ 操作步骤: 1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentO ...

  6. 卸载nginx之后重新安装

    Ubuntu 14.04上卸载nginx之后重新安装没有重新生成配置文件的解决方法 在配置nginx做实验时配置错了,导致访问不了虚拟主机.一狠心把nginx的配置文件目录(/etc/nginx)都删 ...

  7. Spring Boot 配置文件 bootstrap vs application 到底有什么区别?

    用过 Spring Boot 的都知道在 Spring Boot 中有以下两种配置文件 bootstrap (.yml 或者 .properties) application (.yml 或者 .pr ...

  8. python安装redis库

    pip install redis  没有相应的资源 可以到redisio上找到clients,  https://redis.io/clients 如下所示  下图中带黄五角星的为官方推荐的:  下 ...

  9. 范仁义html+css课程---7、表单

    范仁义html+css课程---7.表单 一.总结 一句话总结: 表单标签的话主要掌握form标签.input标签(以及input标签的不同的type值).select标签.textarea等标签,及 ...

  10. Phpoffice 已经弃用

      Package phpoffice/phpexcel is abandoned, you should avoid using it. Use phpoffice/phpspreadsheet i ...