# 代码部署
# SVN部署
注意
如果应用的代码管理方式是SVN才可以使用SVN部署,否则请选择相应的代码管理方式文档查询如何部署。
# 获取仓库地址
- 登陆云应用的管理系统https://sae.sinacloud.com (opens new window)
- 从操作点击“管理”进入应用的管理中心
- 左侧导航选择“运行环境管理”,点击“代码管理”,选择“SVN仓库信息”
# 仓库的用户名密码
- 用户名是安全邮箱
- 密码是安全密码
安全邮箱和密码说明
- 安全邮箱和安全密码不是微博的用户名和密码
- 如果忘记可以从 http://www.sinacloud.com/ucenter/profile.html?from=sidebar (opens new window) 重置
# 修改仓库密码
如果忘记可以从 http://www.sinacloud.com/ucenter/profile.html?from=sidebar (opens new window) 重置。
# Windows系统安装客户端
Windows系统推荐使用TortoiseSVN客户端,可以去官网下载TortoiseSVN客户端 (opens new window),也可以直接从国内的镜像下载:
说明
如果使用TortoiseSVN 1.8.x部署代码发生问题,请尝试更新至最新版本或者使用1.8以下的版本。
# Mac系统安装客户端
MacOS默认已经安装了svn
客户端,如果没有推荐使用brew
(https://brew.sh/ (opens new window))安装,依次执行:
brew update
brew install subversion18
echo 'export PATH="/usr/local/opt/subversion@1.8/bin:$PATH"' >> ~/.zshrc
安装完成后,可以执行svn --version
查询到SVN版本:
svn, version 1.8.16 (r1740329)
compiled Apr 2 2017, 22:11:44 on x86_64-apple-darwin16.5.0
Copyright (C) 2016 The Apache Software Foundation.
This software consists of contributions made by many people;
see the NOTICE file for more information.
Subversion is open source software, see http://subversion.apache.org/
# Ubuntu系统安装客户端
apt-get update
apt-get install subversion
安装完成后,执行svn --version
可以查询SVN的版本。
root@8ae1a18089b3:/# svn --version
svn, version 1.10.0 (r1827917)
compiled Jul 29 2018, 02:58:30 on x86_64-pc-linux-gnu
Copyright (C) 2018 The Apache Software Foundation.
This software consists of contributions made by many people;
see the NOTICE file for more information.
Subversion is open source software, see http://subversion.apache.org/
The following repository access (RA) modules are available:
* ra_svn : Module for accessing a repository using the svn network protocol.
- with Cyrus SASL authentication
- handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
- handles 'file' scheme
* ra_serf : Module for accessing a repository via WebDAV protocol using serf.
- using serf 1.3.9 (compiled with 1.3.9)
- handles 'http' scheme
- handles 'https' scheme
The following authentication credential caches are available:
* Plaintext cache in /.subversion
* GPG-Agent
* KWallet (KDE)
# Windows克隆仓库
说明
请在操作前在管理平台创建一个版本。
请参考以下步骤克隆代码:
在一个空的文件夹下点击鼠标右键,选择“SVN Checkout...”
输入应用的仓库地址
输入用户名密码
- 用户名是安全邮箱
- 密码是安全密码
安全邮箱和密码说明
- 安全邮箱和安全密码不是微博的用户名和密码
- 如果忘记可以从 http://www.sinacloud.com/ucenter/profile.html?from=sidebar (opens new window) 重置
下载仓库的代码成功
查看本地的文件结构
打开本地的文件夹,可以看到所有的代码都在以版本号为文件夹的目录中:
和在线看到的版本是一致的:
从上面就可以看出,每个版本的代码在以版本号为文件夹名称的文件夹下。
说明
如果你直接checkout仓库,但是没有没有创建任何版本,checkout代码后本地的文件夹会是空的。在这种情况下,如果需要提交代码,需要在当前目录下创建一个数字目录,然后将所有的文件放到数字目录下再提交。
# MacOS、Ubuntu克隆仓库
MacOS、Ubuntu下都使用svn客户端下载代码,因此合并介绍。
执行命令:
svn checkout 'https://svn.sinacloud.com/YOUR_APP_NAME' .
出现
Error validating server certificate for 'https://svn.sinacloud.com:443':
- The certificate is not issued by a trusted authority. Use the
fingerprint to validate the certificate manually!
Certificate information:
- Hostname: *.sinacloud.com
- Valid: from Feb 5 00:00:00 2018 GMT until Jun 19 12:00:00 2020 GMT
- Issuer: GeoTrust RSA CA 2018, www.digicert.com, DigiCert Inc, US
- Fingerprint: 79:63:A9:F4:45:62:7C:25:CF:5F:49:5D:37:E0:1A:0C:E4:15:FF:B6
(R)eject, accept (t)emporarily or accept (p)ermanently?
输入p
接收,接下来按图示的提示输入即可:
执行ls -al
可以看到本地的文件结构和应用的数字版本也是一致的:
在线看到的版本列表为:
# Windows下提交修改后的代码
可以使用任何编辑器修改本地的代码,修改后在SVN的文件夹目录下点击右键,选择“SVN Commit...”,具体的步骤如下:
在SVN的代码目录点击“右键”,选择“SVN Commit..”
选择需要提交的文件,写入本次提交需要提交的commit信息,点击确认:
提交成功后,将回显本次提交的版本号:
# MacOS、Ubuntu下提交修改后的代码
通过vim
或者其他编辑器修改代码后,需要将本地修改的文件提交到svn仓库,需要通过两个步骤达成目标:
- svn add 添加需要提交的文件
比如我们在本地创建了一个新的文件c.txt
touch c.txt
通过svn status
或者 svn st
可以看到本地的文件改动状态:
root@8ae1a18089b3:/tmp/svn# touch c.txt
root@8ae1a18089b3:/tmp/svn# svn status
? c.txt
root@8ae1a18089b3:/tmp/svn#
通过 svn add 文件路径
添加需要改动的文件:
root@8ae1a18089b3:/tmp/svn# svn add c.txt
A c.txt
这时再看本地的文件改动状态:
root@8ae1a18089b3:/tmp/svn# svn status
A c.txt
可以看到c.txt已经时A
增加的状态了。
- 增加commit信息并提交
root@8ae1a18089b3:/tmp/svn/1# svn commit -m 'commit info'
Adding c.txt
Transmitting file data .done
Committing transaction...
Committed revision 93.
关于commit信息
commit info
是本次提交的备注部分,建议不要留空,详细描述本地的文件和功能改动,方便审计和回滚。
# Windows下更新代码
如果在多人协作时,在修改代码前,应该执行SVN Update
操作更新本地的代码,执行步骤如下:
- 在版本的文件夹空白处点击右键,选择“SVN Update”
- 执行完可以看到本地改动的文件列表
# MacOS、Ubuntu下更新代码
如果在多人协作时,在修改代码前,应该执行svn up
更新本地的代码,执行效果:
# Windows下冲突合并
在多人协作时,或者在不同的地方同时编辑了一个文件,且在改动前没有执行svn update
更新本地的代码,则在提交时会出现冲突。
代码出现冲突是很正常的时候,这时候需要执行手工合并冲突操作,以下将演示如何合并冲突。
- 从Ubuntu的环境下修改一个文件,正常提交:
root@8ae1a18089b3:/tmp/svn/1# echo "11223344" > c.txt
root@8ae1a18089b3:/tmp/svn/1# svn st
M c.txt
root@8ae1a18089b3:/tmp/svn/1# svn commit -m 'update c.txt'
Sending c.txt
Transmitting file data .done
Committing transaction...
Committed revision 94.
- 在Windows下先不执行
svn update
操作,也修改c.txt
文件:
- 在Windows的文件夹,右键“SVN Commit..”提交改动,就会发现冲突
- 点击弹框的确认,系统会弹出一个需要“Update”的提示
- 点击“Update”完成更新,会出现提示
- 这时候再看
c.txt
文件的内容
<<<<<<< .mine
这里是Windows下的修改||||||| .r93
=======
11223344
>>>>>>> .r94
注意
<<<<<<< .mine
到||||||| .r93
表示本地的93版本的内容=======
到>>>>>>> .r94
表示远程仓库的94版本的内容
这时候就需要自己手工去掉不需要的部分了,例如继续使用93版本的内容,去掉94的内容,改为
这里是Windows下的修改
- 在本地的目录下解决冲突
点击右键,选择svn,选择Resolve..解决冲突
- 选择已经解决冲突的文件
点击确认后,系统会弹出已经解决冲突的提示:
- 再次提交到远程仓库
再次提交到远程,这时发现已经成功了。
# MacOS、Ubuntu下冲突合并
因为MacOS、Ubuntu下都是使用svn
命令实现,因此合并介绍。
- 在Windows下修改
c.txt
内容,并提交。
提交改动:
- 在Ubuntu下也修改同样的文件,但是不要先执行
svn update
通过vim修改文件:
root@8ae1a18089b3:/tmp/svn/1# vim c.txt
root@8ae1a18089b3:/tmp/svn/1# cat c.txt
helllllllllll
- 提交时会出现冲突
root@8ae1a18089b3:/tmp/svn/1# svn commit -m 'add files'
Sending c.txt
svn: E155011: Commit failed (details follow):
svn: E155011: File '/tmp/svn/1/c.txt' is out of date
svn: E160024: resource out of date; try updating
- 解决冲突
先按系统的提示执行update
操作:
root@8ae1a18089b3:/tmp/svn/1# svn update
Updating '.':
C c.txt
Updated to revision 96.
Summary of conflicts:
Text conflicts: 1
Merge conflict discovered in file 'c.txt'.
Select: (p) Postpone, (df) Show diff, (e) Edit file, (m) Merge,
(s) Show all options:
可以按提示执行各种操作,例如输入df
查看文件改动:
root@8ae1a18089b3:/tmp/svn/1# svn update
Updating '.':
C c.txt
Updated to revision 96.
Summary of conflicts:
Text conflicts: 1
Merge conflict discovered in file 'c.txt'.
Select: (p) Postpone, (df) Show diff, (e) Edit file, (m) Merge,
(s) Show all options: df
--- c.txt.r96 - THEIRS
+++ c.txt - MERGED
@@ -1 +1,5 @@
-这里是Windows下的修改2222222
\ No newline at end of file
+<<<<<<< .mine
+helllllllllll
+||||||| .r95
+这里是Windows下的修改=======
+这里是Windows下的修改2222222>>>>>>> .r96
其中:
-这里是Windows下的修改2222222
\ No newline at end of file
是现在仓库中版本96的内容。
+<<<<<<< .mine
到 +||||||| .r95
是本地的文件内容。
输入e
指令编辑本地的文件:
root@8ae1a18089b3:/tmp/svn/1# svn update
Updating '.':
C c.txt
Updated to revision 96.
Summary of conflicts:
Text conflicts: 1
Merge conflict discovered in file 'c.txt'.
Select: (p) Postpone, (df) Show diff, (e) Edit file, (m) Merge,
(s) Show all options: df
--- c.txt.r96 - THEIRS
+++ c.txt - MERGED
@@ -1 +1,5 @@
-这里是Windows下的修改2222222
\ No newline at end of file
+<<<<<<< .mine
+helllllllllll
+||||||| .r95
+这里是Windows下的修改=======
+这里是Windows下的修改2222222>>>>>>> .r96
Select: (p) Postpone, (df) Show diff, (e) Edit file, (m) Merge,
(r) Mark as resolved, (s) Show all options: e
Select: (p) Postpone, (df) Show diff, (e) Edit file, (m) Merge,
(r) Mark as resolved, (s) Show all options: m
Merging 'c.txt'.
Conflicting section found during merge:
(1) their version (at line 0) |(2) your version (at line 1)
--------------------------------------+--------------------------------------
这里是Windows下的修改2222222 |helllllllllll
--------------------------------------+--------------------------------------
Select: (1) use their version, (2) use your version,
(12) their version first, then yours,
(21) your version first, then theirs,
(e1) edit their version and use the result,
(e2) edit your version and use the result,
(eb) edit both versions and use the result,
(p) postpone this conflicting section leaving conflict markers,
(a) abort file merge and return to main menu: 2
Merge of 'c.txt' completed.
Select: (p) Postpone, (df) Show diff, (e) Edit file, (m) Merge,
(r) Mark as resolved, (s) Show all options: p
Summary of conflicts:
Text conflicts: 1
删除本地无用的文件c.txt.mine、c.txt.r95、c.txt.r96等
root@8ae1a18089b3:/tmp/svn/1# ls -al
total 560
drwxr-xr-x 4 root root 4096 Sep 20 05:58 .
drwxr-xr-x 6 root root 46 Sep 20 02:43 ..
drwxr-xr-x 3 root root 123 Sep 20 02:14 .idea
-rw-r--r-- 1 root root 52095 Sep 19 11:54 Destiny.jpg
-rw-r--r-- 1 root root 11087 Sep 19 11:54 bg.jpg
-rw-r--r-- 1 root root 14 Sep 20 05:58 c.txt
-rw-r--r-- 1 root root 14 Sep 20 05:50 c.txt.mine
-rw-r--r-- 1 root root 28 Sep 20 05:50 c.txt.r95
-rw-r--r-- 1 root root 35 Sep 20 05:50 c.txt.r96
-rw-r--r-- 1 root root 918 Sep 19 11:54 callback.php
-rw-r--r-- 1 root root 8711 Sep 19 11:54 cg_result.php
-rw-r--r-- 1 root root 35 Sep 19 11:54 config.yaml
-rw-r--r-- 1 root root 109 Sep 19 11:54 config_weibo.php
-rw-r--r-- 1 root root 1028 Sep 20 02:14 dataImport.php
-rw-r--r-- 1 root root 35233 Sep 19 11:54 hehun_result.php
drwxr-xr-x 2 root root 128 Sep 19 11:54 hello
-rw-r--r-- 1 root root 3110 Sep 20 02:14 index.php
-rw-r--r-- 1 root root 2822 Sep 19 11:54 index__test.html
-rw-r--r-- 1 root root 31449 Sep 19 11:54 logo.jpeg
-rw-r--r-- 1 root root 20720 Sep 19 11:54 logo.jpg
-rw-r--r-- 1 root root 11894 Sep 19 11:54 logo_small.jpg
-rw-r--r-- 1 root root 179 Sep 19 11:54 mysql.php
-rw-r--r-- 1 root root 302 Sep 19 11:54 nosql.php
-rw-r--r-- 1 root root 258 Sep 19 11:54 nosql_get.php
-rw-r--r-- 1 root root 10056 Sep 19 11:54 number.php
-rw-r--r-- 1 root root 31192 Sep 19 11:54 sae_selfchk_oz41l5ow40.php
-rw-r--r-- 1 root root 3357 Sep 19 11:54 send.php
-rw-r--r-- 1 root root 1255 Sep 19 11:54 test.php
-rw-r--r-- 1 root root 34825 Sep 19 11:54 total.html
-rw-r--r-- 1 root root 35204 Sep 19 11:54 total.php
-rw-r--r-- 1 root root 9978 Sep 19 11:54 wb.png
-rw-r--r-- 1 root root 16128 Sep 19 11:54 weibo_login.png
-rw-r--r-- 1 root root 80252 Sep 19 11:54 weibooauth.php
-rw-r--r-- 1 root root 92622 Sep 19 11:54 xf_result.php
root@8ae1a18089b3:/tmp/svn/1# rm -rf c.txt.*
输入svn st
查看本地的状态
root@8ae1a18089b3:/tmp/svn/1# svn st
M c.txt
再次提交改动:
root@8ae1a18089b3:/tmp/svn/1# svn st
M c.txt
root@8ae1a18089b3:/tmp/svn/1# svn commit -m 'merge confit'
Sending c.txt
Transmitting file data .done
Committing transaction...
Committed revision 97.
到此冲突已经解决。
# Git部署
说明
请确认应用的代码管理方式是Git时再使用Git客户端部署代码,否则请参考其他的部署方式。
# Windows客户端命令行安装
Windows下推荐使用git-scm安装git客户端,git-scm官网 (opens new window),请选择你的操作系统后下载软件。
新浪云分流下载:
说明
如果操作系统是64位,就选择64位的软件安装;如果系统是32位,就选择32位的软件安装。
下载后,一路按系统的推荐配置安装,安装完成后,从任意文件夹下空白处点击右键,都会出现Git bash here,点击进入命令行:
执行git --version
可以查询当前安装的git客户端版本。
# MacOS客户端安装
Mac推荐使用brew
(https://brew.sh/ (opens new window))安装,依次执行:
brew install git
安装完成后可以执行 git --version
查看安装的git版本:
# Ubuntu客户端安装
执行命令:
apt-get install git
安装完成后执行 git version
查询安装的git版本:
# 获取标准环境的git仓库地址
- 登陆云应用的管理系统https://sae.sinacloud.com (opens new window)
- 从操作点击“管理”进入应用的管理中心
- 左侧导航选择“运行环境管理”,点击“代码管理”,选择“Git仓库信息”
# 获取容器环境的git仓库地址
- 登陆云应用的管理系统https://sae.sinacloud.com (opens new window)
- 从操作点击“管理”进入应用的管理中心
- 左侧导航选择“运行环境管理”,点击“代码管理”
# PHP标准环境Git管理示例
# 创建应用
以PHP运行环境为例,创建应用时,选择“PHP”语言,运行环境选择“标准”,代码管理方式选择“Git”,即可创建一个Git管理的标准环境应用。
- 登录云应用管理平台 https://sae.sinacloud.com (opens new window)
- 点击“+创建应用”进入应用的创建功能
- 按以下图示选择,语言选择“PHP”,运行环境选择“标准环境”,代码管理方式选择“Git”
# 创建版本
创建完成后,从应用的管理中心,选择左侧导航“运行环境管理” - “代码管理”进入代码管理功能,点击“+创建新版本”:
输入版本号1
,点击确认创建版本。
# 本地clone仓库代码
在命令行执行 git clone '仓库地址' .
将仓库中的代码下载到本地:
root@8ae1a18089b3:/tmp/git# git clone 'https://git.sinacloud.com/gitexample' .
Cloning into '.'...
Username for 'https://git.sinacloud.com': hfutming@gmail.com
Password for 'https://hfutming@gmail.com@git.sinacloud.com':
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
下载后的本地文件列表:
root@8ae1a18089b3:/tmp/git# ls -al
total 4
drwxr-xr-x 3 root root 30 Sep 20 08:51 .
drwxrwxrwt 4 root root 28 Sep 20 08:51 ..
drwxr-xr-x 8 root root 163 Sep 20 08:51 .git
-rw-r--r-- 1 root root 15 Sep 20 08:51 .sae
# 添加一个文件
在根目录下添加一个文件index.php
<?php
phpinfo();
执行git status
查看状态:
root@8ae1a18089b3:/tmp/git# git status
On branch 1
Your branch is up to date with 'origin/1'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
index.php
nothing added to commit but untracked files present (use "git add" to track)
可以看到index.php还没有加到版本管理中,执行git add index.php
添加到版本管理中
root@8ae1a18089b3:/tmp/git# git add index.php
root@8ae1a18089b3:/tmp/git# git status
On branch 1
Your branch is up to date with 'origin/1'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: index.php
批量添加文件
可以使用 git add --all
添加所有文件
这时候文件的状态已经变为“new file”。
# 设置提交者的邮箱和昵称
在commit操作前,需要设定提交的邮箱和昵称,依次执行。
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
请注意
请把“you@example.com”换成你的邮箱,“Your Name”换成你的昵称。
# 添加commit信息
执行
git commit -m '本次提交的信息'
例如
root@8ae1a18089b3:/tmp/git# git commit -m 'first upload'
[1 98dcf6b] first upload
1 file changed, 2 insertions(+)
create mode 100644 index.php
# 推送到远程仓库
执行git push origin 1
将本地的改动提交到远程的git仓库,请注意这里的1
是应用的版本,也是当前的分支名称,查询当前分支:
root@8ae1a18089b3:/tmp/git# git branch
* 1
因此,这里的分支名称和版本号是一一对应的,开始推送:
root@8ae1a18089b3:/tmp/git# git push origin 1
Username for 'https://git.sinacloud.com': hfutming@gmail.com
Password for 'https://hfutming@gmail.com@git.sinacloud.com':
Counting objects: 3, done.
Delta compression using up to 16 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 281 bytes | 281.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://git.sinacloud.com/gitexample
3ce3ffc..98dcf6b 1 -> 1
可以看到本次提交已经成功了,hash值为98dcf6b
。
# 查询修改记录
执行git log
可以查询当前版本的修改记录,例如:
root@8ae1a18089b3:/tmp/git# git log
commit 98dcf6b75e2b9ac10b6febe57d805cd99ca61879 (HEAD -> 1, origin/HEAD, origin/1)
Author: hfutming <hfutming@gmail.com>
Date: Thu Sep 20 09:22:41 2018 +0000
first upload
commit 3ce3ffcc4c31528715c8b87dfa938805cf435bca
Author: Nobody <nobody@yq230.onlinemgr>
Date: Thu Sep 20 16:48:09 2018 +0800
create new version: 1 from online manager platform
可以查询到提交的人、上传的时间及commit的log。
# 验证访问
此时可以访问二级域名查询是否提交成功,直接访问域名http://你的应用名.applinzi.com/ (opens new window),可以看到已经输出了PHP Info的页面:
# 删除文件
参考添加文件的步骤,再添加一个2.txt
文件,增加后的文件目录为:
root@8ae1a18089b3:/tmp/git# ls -al
total 12
drwxr-xr-x 3 root root 60 Sep 20 09:43 .
drwxrwxrwt 4 root root 28 Sep 20 09:42 ..
drwxr-xr-x 8 root root 185 Sep 20 09:43 .git
-rw-r--r-- 1 root root 15 Sep 20 09:43 .sae
-rw-r--r-- 1 root root 2 Sep 20 09:43 2.txt
-rw-r--r-- 1 root root 17 Sep 20 09:43 index.php
接下来演示如何删除文件2.txt
:
root@8ae1a18089b3:/tmp/git# git rm 2.txt
rm '2.txt'
root@8ae1a18089b3:/tmp/git# git commit -m 'delete 2.txt'
[1 60f8782] delete 2.txt
1 file changed, 1 deletion(-)
delete mode 100644 2.txt
root@8ae1a18089b3:/tmp/git# git push origin 1
Username for 'https://git.sinacloud.com': hfutming@gmail.com
Password for 'https://hfutming@gmail.com@git.sinacloud.com':
Counting objects: 2, done.
Delta compression using up to 16 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 215 bytes | 215.00 KiB/s, done.
Total 2 (delta 1), reused 0 (delta 0)
To https://git.sinacloud.com/gitexample
025c101..60f8782 1 -> 1
# 代码回滚
执行git revert
可以撤销刚才的改动,例如将上述的删除2.txt
文件撤销:
root@8ae1a18089b3:/tmp/git# git revert HEAD
[1 c386dd3] Revert "delete 2.txt"
1 file changed, 1 insertion(+)
create mode 100644 2.txt
root@8ae1a18089b3:/tmp/git# ls
2.txt index.php
root@8ae1a18089b3:/tmp/git# git push origin 1
Username for 'https://git.sinacloud.com': hfutming@gmail.com
Password for 'https://hfutming@gmail.com@git.sinacloud.com':
Counting objects: 3, done.
Delta compression using up to 16 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 324 bytes | 324.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://git.sinacloud.com/gitexample
60f8782..c386dd3 1 -> 1
# 容器环境Git管理示例
容器环境Node.js、Python独享环境、Golang等环境使用Git管理代码,示例以Node.js为例。
# 创建Node.js应用
- 登录云应用管理平台 https://sae.sinacloud.com (opens new window)
- 点击“+创建应用”进入应用的创建功能
- 按以下图示选择,语言选择“NodeJS”,选择一个应用的二级域名,点击创建应用
# 查询Git仓库地址
进入应用的管理中心,点击左侧导航“运行环境管理”,选择“代码管理”:
说明
以下示例在Linux环境下执行。
# Git clone仓库
执行:
git clone 'https://git.sinacloud.com/你的应用名' .
示例:
root@8ae1a18089b3:/tmp/node.js# git clone 'https://git.sinacloud.com/nodejsexample' .
Cloning into '.'...
Username for 'https://git.sinacloud.com': hfutming@gmail.com
Password for 'https://hfutming@gmail.com@git.sinacloud.com':
warning: You appear to have cloned an empty repository.
# 下载示例代码
依次执行:
wget 'https://codeload.github.com/sinacloud/nodejs-getting-started/zip/master'
unzip master
cp -rp nodejs-getting-started-master/* .
rm -rf nodejs-getting-started-master/
示例输出:
root@8ae1a18089b3:/tmp/node.js# wget 'https://codeload.github.com/sinacloud/nodejs-getting-started/zip/master'
--2018-09-20 11:08:38-- https://codeload.github.com/sinacloud/nodejs-getting-started/zip/master
Resolving codeload.github.com (codeload.github.com)... 192.30.253.121, 192.30.253.120
Connecting to codeload.github.com (codeload.github.com)|192.30.253.121|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/zip]
Saving to: 'master'
master [ <=> ] 2.02K --.-KB/s in 0.002s
2018-09-20 11:08:40 (1.20 MB/s) - 'master' saved [2073]
root@8ae1a18089b3:/tmp/node.js# unzip master
Archive: master
ed9e0af8d1fb884aabb36eac76c8bfa6c0de5227
creating: nodejs-getting-started-master/
extracting: nodejs-getting-started-master/.gitignore
inflating: nodejs-getting-started-master/README.md
inflating: nodejs-getting-started-master/config.yaml
inflating: nodejs-getting-started-master/index.js
inflating: nodejs-getting-started-master/package.json
root@8ae1a18089b3:/tmp/node.js# cp -rp nodejs-getting-started-master/* .
root@8ae1a18089b3:/tmp/node.js# rm -rf nodejs-getting-started-master/
root@8ae1a18089b3:/tmp/node.js# ls -al
total 20
drwxr-xr-x 3 root root 104 Sep 20 11:08 .
drwxrwxrwt 5 root root 43 Sep 20 11:08 ..
drwxr-xr-x 7 root root 119 Sep 20 11:05 .git
-rw-r--r-- 1 root root 849 Sep 14 10:43 README.md
-rw-r--r-- 1 root root 75 Sep 14 10:43 config.yaml
-rw-r--r-- 1 root root 156 Sep 14 10:43 index.js
-rw-r--r-- 1 root root 2073 Sep 20 11:08 master
-rw-r--r-- 1 root root 360 Sep 14 10:43 package.json
root@8ae1a18089b3:/tmp/node.js#
# git add 文件
git add --all
# git commit增加日志信息
执行
git commit -m 'first init'
输出如下:
root@8ae1a18089b3:/tmp/node.js# git commit -m 'first init'
[master (root-commit) ac93113] first init
5 files changed, 64 insertions(+)
create mode 100644 README.md
create mode 100644 config.yaml
create mode 100644 index.js
create mode 100644 master
create mode 100644 package.json
# git push到远程
执行:
git push origin master
输出如下:
root@8ae1a18089b3:/tmp/node.js# git push origin master
Username for 'https://git.sinacloud.com': hfutming@gmail.com
Password for 'https://hfutming@gmail.com@git.sinacloud.com':
Counting objects: 7, done.
Delta compression using up to 16 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 2.66 KiB | 908.00 KiB/s, done.
Total 7 (delta 0), reused 0 (delta 0)
remote: 导出 Git 代码中...
remote: 构建程序中...
-----> Node.js app detected
-----> Network Connection Success
-----> Creating runtime environment
NPM_CONFIG_LOGLEVEL=error
NPM_CONFIG_PRODUCTION=true
NODE_ENV=production
NODE_MODULES_CACHE=true
-----> Installing binaries
engines.node (package.json): 10.10.0
engines.npm (package.json): unspecified (use default)
Downloading and installing node 10.10.0...
Using default npm version: 6.4.1
-----> Restoring cache
Skipping cache restore (new runtime signature)
-----> Building dependencies
Pruning any extraneous modules
up to date in 0.494s
Installing node modules (package.json)
registry
http://registry.npm.taobao.org/
added 50 packages from 47 contributors in 4.329s
-----> Caching build
Clearing previous node cache
Saving 2 cacheDirectories (default):
- node_modules
- bower_components (nothing to cache)
- nodegyp_lib (nothing to cache)
-----> Build succeeded!
`-- express@4.16.3
-----> Discovering process types
Default types for -> web
-----> Compiled slug size is 19M
remote: Generating docker image...
remote: Pushing image registry.docker.sae.sina.com.cn/nodejsexample:ac93113 ....
remote: 部署程序中 ...........
To https://git.sinacloud.com/nodejsexample
* [new branch] master -> master
请注意
容器运行环境的分类只支持一个分支,分支的名称是master
。
# 验证访问
访问域名可以看到应用已经部署完成:
# FTP部署
请注意
说明只针对代码管理方式为FTP的运行环境,如果你的运行环境代码管理方式不是FTP,请查阅其他的部分的说明文档。
# 下载FTP客户端
推荐使用FileZilla (opens new window)客户端,客户端支持Windows、Mac和Linux,请访问下载页面选择程序下载安装。
# 获取FTP连接信息
当前仅PHP的云空间运行环境使用FTP部署代码,创建一个该环境的应用后,从“运行环境管理”的“代码管理”功能处可以查询到应用的FTP连接信息。
选择需要查询的应用,点击“操作”中的“管理”进入应用的管理主页
选择左侧导航的“运行环境管理”,“代码管理”进入代码管理页面即可查询FTP的连接信息:
# 新建一个站点并连接
- 打开FileZilla客户端,点击菜单中的“文件”,选择“站点管理器”:
- 点击新站点,输入FTP的连接信息
请注意
- 加密方式需要选择“只使用普通FTP”
- 登录类型选择“正常”
- 添加完成后,点击“连接”,连接到FTP服务端器
连接成功后,会列出服务端的文件列表:
# 设置FTP的编码
如果在Windows下上传带中文的文件或者文件夹,因为新浪云的服务端运行在Linux环境下,文件和文件夹的编码为utf-8
,Windows文件的默认编码为GB2312
。
因此如果设置上传时的编码,上传中文的文件后看到的服务端编码将会是乱码。
打开“站点管理器”,选择刚添加的站点,选择“字符集”选项,勾选“强制 UTF-8”,如图所示:
# 设置连接模式
连接模式说明
目前FTP服务端只支持被动模式,请确保您的客户端支持被动模式。
打开“站点管理器”,选择刚添加的站点,选择“传输设置”选择,选择“被动”,如图所示:
# 上传一个文件
从本地站点选择代码的存储路径,在需要上传的文件上点击右键,选择“上传”,就可以把文件加到上传的队列中:
上传成功后,从“远程站点”下就可以看到上传的文件:
# 修改FTP密码
可以从在线管理平台修改FTP的密码,修改FTP密码后立即生效。
从应用的管理中心,选择左侧“运行环境管理”,进入“代码管理”进入管理中心,选择“FTP”标签可以看到修改密码的入口。
关于FTP密码
FTP的密码请尽量使用包含数字、及大小写字符的组合,不要使用常用密码及弱口令,FTP密码泄露会导致网站源码泄露,存在极大的安全风险。
# FTP IP校验
FTP的协议设计时有两个通道,一个是命令通道,另外一个是数据通道,通常情况下,这两个通道使用同一个客户端IP但是使用不同的客户端端口。
新浪云提供的FTP服务器默认校验这两个IP是否一致,如果不一致会报425 Rejected data connection from foreign address
错误,出现这个错误是因为两个通道的IP不一致。
如果不在极端的网络环境下,请不要关闭这个特性,如果需要开启,请从FTP的设置页面关闭,从应用的管理中心,选择左侧“运行环境管理”,进入“代码管理”进入管理中心,选择“FTP”标签可以看到修改配置的入口。
# War包上传
说明
War包部署仅适用于Java运行环境,如果应用不是Java运行环境,请选择其他类型的代码部署方式查看。
进入应用的管理中心,左侧导航选择“运行环境管理”,再选择“war包管理”即可进入war包上传的功能,在本地导出项目的war包(war包需要包含项目需要的所有jar包),上传war包没有大小限制。
上传war包后的部署将由系统异步完成,可以关闭浏览器或者在本页面继续等待查看导入的任务状态,部署中原来的容器实例将会逐个重新部署。
# SSH客户端
说明
仅容器虚拟机支持SSH登录,其他的运行环境暂时不支持通过SSH管理,如果代码的运行环境不是容器虚拟机,请参考其他章节的代码部署说明。
# Windows环境
新浪云自定义运行环境支持证书通过SSH登录到启动的容器虚拟机,如果你使用的是Windows环境,在完成以下步骤后可以登录。
# 生成SSH证书
- 下载Git for Windows
使用Git for Windows的ssh-keygen
命令,从https://git-for-windows.github.io (opens new window)下载并完成安装。
- 使用ssh-keygen.exe命令
在任意文件下空白处点击右键,选择Git Bash
,如下图所示:
输入命令ssh-keygen.exe
,一路回车
,如下图所示:
3、查看生成的公钥
输入命令notepad.exe 文件路径
使用记事本直接打开生成的公钥文件,文件路径在第二步有输出,例如/c/Users/37708/.ssh/id_rsa.pub
,如图所示:
# 上传公钥到新浪云
进入新浪云用户中心,选择左侧“用户信息”,进入“SSH密钥管理”上传,如图所示:
点击“+创建SSH密钥”,输入一个标题(可以任意,起标记作用),内容处填写上述用记事本打开的文件公钥文件内容,如图所示:
点击“确定”完成上传。
# 通过SSH客户端登录到容器
Windows下SSH客户端我们推荐你使用Xshell
(也可以使用其他的客户端,我们教程中仅以Xshell
为例),Xshell下载地址:https://www.netsarang.com/products/xsh_overview.html (opens new window),请下载并完成安装。
- 从容器的管理页面获取SSH登录信息
进入应用的管理中心,左侧导航选择“运行环境管理” - “容器管理”进入容器管理页面,点击“SSH登录”查询登录信息,如图所示:
- 端口为:60022
- 用户名为:应用名(例如
douyu1
)
- 通过Xshell登录
点击“文件” -> "新建会话",主机处填写“ssh.sinacloud.com”,端口处填写“60022”,如图所示:
点击“用户身份验证”配置登录信息为:
- 方法选择:Public key
- 用户名为:应用的二级域名前缀
- 用户密钥:选择刚生成的私钥文件,一般文件名叫
id_rsa
,通常路径在C:\Users\你的windows用户名\.ssh\
这个目录下,如下图所示:
点击确定即可登录容器,登录后如下:
# Linux环境
新浪云自定义运行环境支持证书通过SSH登录到启动的容器虚拟机,如果你使用的是Linux环境,在完成以下步骤后可以登录。
# 生成SSH证书
执行命令ssh-keygen
一路回车,如下图所示:
生成的公钥和私钥文件默认都存在~/.ssh/
目录下,查看公钥文件并上传:
# 上传公钥到新浪云
进入新浪云用户中心,选择左侧“用户信息”,进入“SSH密钥管理”上传,如图所示:
点击“+创建SSH密钥”,输入一个标题(可以任意,起标记作用),内容处填写上述用记事本打开的文件公钥文件内容,如图所示:
点击“确定”完成上传。
# 通过SSH客户端登录到容器
- 从容器的管理页面获取SSH登录信息
进入应用的管理中心,左侧导航选择“运行环境管理” - “容器管理”进入容器管理页面,点击“SSH登录”查询登录信息,如图所示:
- 端口为:60022
- 用户名为:应用名(例如
douyu1
)
- 通过SSH客户端登录
从终端执行:
ssh -p 60022 你的应用名@ssh.sinacloud.com
请注意
如果你的私钥文件不在默认的路径下,可以通过 -i 指定证书位置,如:ssh -i ~/.ssh/id_rsa -p 60022 你的应用名@ssh.sinacloud.com
# Mac环境
新浪云自定义运行环境支持证书通过SSH登录到启动的容器虚拟机,如果你使用的是Linux环境,在完成以下步骤后可以登录。
# 生成SSH证书
执行命令ssh-keygen一路回车,如下图所示:
生成的公钥和私钥文件默认都存在~/.ssh/目录下,查看公钥文件并上传:
# 上传公钥到新浪云
进入新浪云用户中心,选择左侧“用户信息”,进入“SSH密钥管理”上传,如图所示:
点击“+创建SSH密钥”,输入一个标题(可以任意,起标记作用),内容处填写上述用记事本打开的文件公钥文件内容,如图所示:
点击“确定”完成上传。
# 通过SSH客户端登录到容器
- 从容器的管理页面获取SSH登录信息
进入应用的管理中心,左侧导航选择“运行环境管理” - “容器管理”进入容器管理页面,点击“SSH登录”查询登录信息,如图所示:
- 端口为:60022
- 用户名为:应用名(例如
douyu1
)
- 通过SSH客户端登录
从终端执行:
ssh -p 60022 你的应用名@ssh.sinacloud.com
请注意
如果你的私钥文件不在默认的路径下,可以通过 -i 指定证书位置,如:ssh -i ~/.ssh/id_rsa -p 60022 你的应用名@ssh.sinacloud.com