<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="https://publishpress.com/"
	>

<channel>
	<title>Infrastructure Archives - Tomoshare</title>
	<atom:link href="https://blog.tomosia.com.vn/danh-muc/infrastructure/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.tomosia.com.vn/danh-muc/infrastructure/</link>
	<description>Kênh chia sẻ kiến thức Tomosia Việt Nam</description>
	<lastBuildDate>Fri, 26 Jan 2024 04:35:59 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://blog.tomosia.com.vn/wp-content/uploads/2023/09/cropped-icon-32x32.png</url>
	<title>Infrastructure Archives - Tomoshare</title>
	<link>https://blog.tomosia.com.vn/danh-muc/infrastructure/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Docker tips</title>
		<link>https://blog.tomosia.com.vn/docker-tips/</link>
					<comments>https://blog.tomosia.com.vn/docker-tips/#comments</comments>
		
		<dc:creator><![CDATA[Minh Tang]]></dc:creator>
		<pubDate>Tue, 19 Dec 2023 03:57:59 +0000</pubDate>
				<category><![CDATA[Infrastructure]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=2712</guid>

					<description><![CDATA[<p>Setting tag on an image Get bash inside runned container Clear docker unused images Clear docker exited containers&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/docker-tips/">Docker tips</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Setting tag on an image</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="sudo docker tag 5db5f8471261 rhrn/ubuntu:webdev" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">docker</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">tag</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">5</span><span style="color: #E7EE98">db5f8471261</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">rhrn/ubuntu:webdev</span></span></code></pre></div>



<p class="wp-block-paragraph">Get bash inside runned container</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="sudo docker exec -i -t 665b4a1e17b6 bash" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">docker</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">exec</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-i</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-t</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">665</span><span style="color: #E7EE98">b4a1e17b6</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">bash</span></span></code></pre></div>



<p class="wp-block-paragraph">Clear docker unused images</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="docker rmi $(docker images -f &quot;dangling=true&quot; -q)" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">docker</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">rmi</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">$(</span><span style="color: #62E884">docker</span><span style="color: #E7EE98"> images </span><span style="color: #BF9EEE">-f</span><span style="color: #E7EE98"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">dangling=true</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98"> </span><span style="color: #BF9EEE">-q</span><span style="color: #E7EE98">)</span></span></code></pre></div>



<p class="wp-block-paragraph">Clear docker exited containers</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="docker rm $(docker ps -aq -f status=exited)" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">docker</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">rm</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">$(</span><span style="color: #62E884">docker</span><span style="color: #E7EE98"> ps </span><span style="color: #BF9EEE">-aq</span><span style="color: #E7EE98"> </span><span style="color: #BF9EEE">-f</span><span style="color: #E7EE98"> status=exited)</span></span></code></pre></div>



<p class="wp-block-paragraph">Clear unused volumes</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="docker volume ls -qf dangling=true | xargs -r docker volume rm" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">docker</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">volume</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ls</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-qf</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">dangling=</span><span style="color: #BF9EEE">true</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">|</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">xargs</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-r</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">docker</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">volume</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">rm</span></span></code></pre></div>



<p class="wp-block-paragraph">Sort images by size</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:-8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="docker images --format &quot;{{.ID}}\\t{{.Size}}\\t{{.Repository}}&quot; | sort -k 2 -h" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">docker</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">images</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--format</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">{{.ID}}</span><span style="color: #F286C4">\\</span><span style="color: #E7EE98">t{{.Size}}</span><span style="color: #F286C4">\\</span><span style="color: #E7EE98">t{{.Repository}}</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">|</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">sort</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-k</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">2</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-h</span></span></code></pre></div>
<p>The post <a href="https://blog.tomosia.com.vn/docker-tips/">Docker tips</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/docker-tips/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title>Upload File Lên Amazon S3: Dùng Multipart Upload vs AWS CLI</title>
		<link>https://blog.tomosia.com.vn/upload-file-len-amazon-s3-dung-multipart-upload-vs-aws-cli/</link>
					<comments>https://blog.tomosia.com.vn/upload-file-len-amazon-s3-dung-multipart-upload-vs-aws-cli/#comments</comments>
		
		<dc:creator><![CDATA[Thuc Phan]]></dc:creator>
		<pubDate>Mon, 11 Dec 2023 01:38:52 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Aws]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=2273</guid>

					<description><![CDATA[<p>Việc upload file lên Amazon S3 sẽ trở nên mạnh mẽ và hiệu quả hơn với Multipart Upload&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/upload-file-len-amazon-s3-dung-multipart-upload-vs-aws-cli/">Upload File Lên Amazon S3: Dùng Multipart Upload vs AWS CLI</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Việc upload file lên Amazon S3 sẽ trở nên mạnh mẽ và hiệu quả hơn với Multipart Upload và AWS CLI. Trong bài viết này, chúng ta sẽ khám phá cách sử dụng công cụ dòng lệnh mạnh mẽ của AWS để tối ưu hóa quá trình upload và đảm bảo tính toàn vẹn của dữ liệu</p>



<h2 id="aws-cli-configuration" class="wp-block-heading">AWS CLI Configuration</h2>



<ul class="wp-block-list">
<li>VIệc đầu tiên cần kiểm tra xem máy của bạn đã được cấu hình AWS CLI chưa</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="aws configure list" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">configure</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">list</span></span></code></pre></div>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="1024" height="222" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-8.png" alt="This image has an empty alt attribute; its file name is Screen-Shot-2023-12-05-at-8.08.01-AM-1024x222.png" class="wp-image-2284" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-8.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-8-300x65.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-8-768x167.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-8-380x82.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-8-800x173.png 800w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>Bạn có thể cấu hình một profile mới như sau</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="aws configure" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">configure</span></span></code></pre></div>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="148" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.18.15-AM-1024x148.png" alt="" class="wp-image-2285" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.18.15-AM-1024x148.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.18.15-AM-300x43.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.18.15-AM-768x111.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.18.15-AM-380x55.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.18.15-AM-800x116.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.18.15-AM-1160x168.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.18.15-AM.png 1452w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>Tạo một bucket trên S3</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="1024" height="601" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-10.png" alt="This image has an empty alt attribute; its file name is Screen-Shot-2023-12-05-at-8.32.39-PM-1024x601.png" class="wp-image-2331" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-10.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-10-300x176.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-10-768x451.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-10-380x223.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-10-800x470.png 800w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>Chuẩn bị file muốn upload</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="96" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.44.24-PM-1024x96.png" alt="" class="wp-image-2329" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.44.24-PM-1024x96.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.44.24-PM-300x28.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.44.24-PM-768x72.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.44.24-PM-380x36.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.44.24-PM-800x75.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.44.24-PM-1160x109.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.44.24-PM.png 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 id="use-high-level-aws-s3-commands" class="wp-block-heading">Use high-level aws s3 commands</h2>



<ul class="wp-block-list">
<li>Để dùng high-level&nbsp;command cho multipart upload, có thể chạy lệnh sau</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="aws s3 cp large_test_file s3://DOC-EXAMPLE-BUCKET/" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">cp</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">large_test_file</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3://DOC-EXAMPLE-BUCKET/</span></span></code></pre></div>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="59" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-8.00.07-AM-1024x59.png" alt="" class="wp-image-2427" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-8.00.07-AM-1024x59.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-8.00.07-AM-300x17.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-8.00.07-AM-768x44.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-8.00.07-AM-380x22.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-8.00.07-AM-800x46.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-8.00.07-AM-1160x67.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-8.00.07-AM.png 1494w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>Khi bạn sử dụng lệnh <code><strong>aws s3 cp</strong></code> để tải lên một file vào Amazon S3, AWS CLI có thể tự quyết định xem có nên dùng <strong><code>multipart upload</code></strong> hay không, dựa vào kích thước của file và các cấu hình liên quan</li>
</ul>



<ul class="wp-block-list">
<li>Tốc độ upload còn phụ thuộc vào tốc độ wifi nhưng nhìn chung là upload khá nhanh</li>
</ul>



<ul class="wp-block-list">
<li>Để mã hoá file khi upload, có thể dùng lệnh sau</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="aws s3 cp large_test_file s3://DOC-EXAMPLE-BUCKET/ --metadata md5=&quot;examplemd5value1234/4Q&quot;" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">cp</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">large_test_file</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3://DOC-EXAMPLE-BUCKET/</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--metadata</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">md5=</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">examplemd5value1234/4Q</span><span style="color: #DEE492">&quot;</span></span></code></pre></div>



<ul class="wp-block-list">
<li>Để config max concurrent request, có thể chạy lệnh sau <em>(mặc định là 10)</em></li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="aws configure set default.s3.max_concurrent_requests 20" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">configure</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">set</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">default.s3.max_concurrent_requests</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">20</span></span></code></pre></div>



<ul class="wp-block-list">
<li><strong>Lưu ý:</strong> max_concurrent_requests càng nhiều thì trong quá trình upload sẽ tiêu hao nhiều băng thông và tài nguyên của máy chủ hơn</li>
</ul>



<ul class="wp-block-list">
<li>Để biết thêm thông tin về cách định cấu hình AWS CLI với Amazon S3 thì hãy xem <a href="https://awscli.amazonaws.com/v2/documentation/api/latest/topic/s3-config.html" target="_blank" rel="noreferrer noopener"><strong>AWS CLI S3 configuration</strong></a></li>
</ul>



<ul class="wp-block-list">
<li>Ngoài lệnh copy, bạn cũng có thể sử dụng các lệnh AWS S3 khác liên quan đến việc tải object lên S3 như <strong><code>aws s3 sync</code></strong> hoặc <strong><code>aws s3 mv</code></strong></li>
</ul>



<ul class="wp-block-list">
<li> Để xem thêm các options khi copy, có thể dùng lệnh sau</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="aws s3 cp help" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">cp</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">help</span></span></code></pre></div>



<h2 id="use-low-level-aws-s3api-commands" class="wp-block-heading">Use low-level aws s3api commands</h2>



<p class="wp-block-paragraph">1. Chia file bạn muốn tải lên thành nhiều phần</p>



<ul class="wp-block-list">
<li><strong>Ubuntu:</strong> <a href="https://askubuntu.com/questions/54579/how-to-split-larger-files-into-smaller-parts">https://askubuntu.com/questions/54579/how-to-split-larger-files-into-smaller-parts</a></li>
</ul>



<ul class="wp-block-list">
<li><strong>MacOS</strong></li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="split -b fileSize path/to/filename" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">split</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-b</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">fileSize</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">path/to/filename</span></span></code></pre></div>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="114" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-2.17.51-PM-1024x114.png" alt="" class="wp-image-2453" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-2.17.51-PM-1024x114.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-2.17.51-PM-300x33.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-2.17.51-PM-768x86.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-2.17.51-PM-380x42.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-2.17.51-PM-800x89.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-2.17.51-PM-1160x129.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-2.17.51-PM.png 1454w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>Mình thử split một file hơn 20MB thì nó sẽ tự động sinh ra 5 files con với tên random như hình minh hoạ</li>
</ul>



<p class="wp-block-paragraph">2. Chạy lệnh sau để khởi tạo multipart upload và truy xuất liên kết với một <strong>UploadID</strong>, kết quả phản hồi có chứa UploadID value</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="aws s3api create-multipart-upload --bucket DOC-EXAMPLE-BUCKET --key large-test-file" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3api</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">create-multipart-upload</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--bucket</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">DOC-EXAMPLE-BUCKET</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">large-test-file</span></span></code></pre></div>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="118" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-15.png" alt="This image has an empty alt attribute; its file name is Screen-Shot-2023-12-08-at-2.37.13-PM-1024x118.png" class="wp-image-2463" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-15.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-15-300x35.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-15-768x89.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-15-380x44.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-15-800x92.png 800w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">3. Copy UploadID value để dùng cho các bước sau</p>



<p class="wp-block-paragraph">4. Chạy lệnh sau để upload các files part đã split ở trên, kết quả phản hồi có chứa <strong>ETag</strong> value</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="aws s3api upload-part --bucket DOC-EXAMPLE-BUCKET --key large-test-file --part-number 1 --body large-test-file.001 --upload-id UploadID" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3api</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">upload-part</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--bucket</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">DOC-EXAMPLE-BUCKET</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">large-test-file</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--part-number</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">1</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--body</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">large-test-file.001</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--upload-id</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">UploadID</span></span></code></pre></div>



<p class="wp-block-paragraph">5.&nbsp;&nbsp;&nbsp;&nbsp;Copy&nbsp;<strong>ETag</strong>&nbsp;value để dùng cho bước sau</p>



<p class="wp-block-paragraph">6. Lặp lại bước 4 &amp; 5 đến khi upload hết các files part</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="304" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.06.30-PM-1024x304.png" alt="" class="wp-image-2468" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.06.30-PM-1024x304.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.06.30-PM-300x89.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.06.30-PM-768x228.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.06.30-PM-1536x456.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.06.30-PM-2048x607.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.06.30-PM-380x113.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.06.30-PM-800x237.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.06.30-PM-1160x344.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.06.30-PM.png 3196w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">7. Tạo một file <strong>fileparts.json</strong> với nội dung là <strong>ETag</strong> value của các part đã upload ở trên</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">JSON</span><span role="button" tabindex="0" data-code="{
  &quot;Parts&quot;: [
    {
      &quot;ETag&quot;: &quot;example8be9a0268ebfb8b115d4c1fd3&quot;,
      &quot;PartNumber&quot;:1
    },
    {
        &quot;ETag&quot;: &quot;example246e31ab807da6f62802c1ae8&quot;,
        &quot;PartNumber&quot;:2
    }
  ]
}" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #97E2F2">&quot;</span><span style="color: #97E1F1">Parts</span><span style="color: #97E2F2">&quot;</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> [</span></span>
<span class="line"><span style="color: #F6F6F4">    {</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #97E2F2">&quot;</span><span style="color: #97E1F1">ETag</span><span style="color: #97E2F2">&quot;</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">example8be9a0268ebfb8b115d4c1fd3</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #97E2F2">&quot;</span><span style="color: #97E1F1">PartNumber</span><span style="color: #97E2F2">&quot;</span><span style="color: #F286C4">:</span><span style="color: #BF9EEE">1</span></span>
<span class="line"><span style="color: #F6F6F4">    },</span></span>
<span class="line"><span style="color: #F6F6F4">    {</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #97E2F2">&quot;</span><span style="color: #97E1F1">ETag</span><span style="color: #97E2F2">&quot;</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">example246e31ab807da6f62802c1ae8</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #97E2F2">&quot;</span><span style="color: #97E1F1">PartNumber</span><span style="color: #97E2F2">&quot;</span><span style="color: #F286C4">:</span><span style="color: #BF9EEE">2</span></span>
<span class="line"><span style="color: #F6F6F4">    }</span></span>
<span class="line"><span style="color: #F6F6F4">  ]</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span></code></pre></div>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="791" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.19.55-PM-1024x791.png" alt="" class="wp-image-2470" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.19.55-PM-1024x791.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.19.55-PM-300x232.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.19.55-PM-768x593.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.19.55-PM-380x293.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.19.55-PM-800x618.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.19.55-PM-1160x896.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.19.55-PM.png 1238w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">8. Chạy lệnh sau để hoàn thành quá trình upload</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="aws s3api complete-multipart-upload --multipart-upload file://path/to/fileparts.json --bucket DOC-EXAMPLE-BUCKET --key large-test-file --upload-id UploadID" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3api</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">complete-multipart-upload</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--multipart-upload</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">file://path/to/fileparts.json</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--bucket</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">DOC-EXAMPLE-BUCKET</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">large-test-file</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--upload-id</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">UploadID</span></span></code></pre></div>



<ul class="wp-block-list">
<li>Kết quả phản hồi sẽ có chứa <strong>Location</strong> value là url dẫn đến file trên S3 của bạn</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">JSON</span><span role="button" tabindex="0" data-code="{
    &quot;ETag&quot;: &quot;exampleae01633ff0af167d925cad279-2&quot;,
    &quot;Bucket&quot;: &quot;DOC-EXAMPLE-BUCKET&quot;,
    &quot;Location&quot;: &quot;https://DOC-EXAMPLE BUCKET.s3.amazonaws.com/large-test-file&quot;,
   
    &quot;Key&quot;: &quot;large-test-file&quot;
}" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E2F2">&quot;</span><span style="color: #97E1F1">ETag</span><span style="color: #97E2F2">&quot;</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">exampleae01633ff0af167d925cad279-2</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E2F2">&quot;</span><span style="color: #97E1F1">Bucket</span><span style="color: #97E2F2">&quot;</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">DOC-EXAMPLE-BUCKET</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E2F2">&quot;</span><span style="color: #97E1F1">Location</span><span style="color: #97E2F2">&quot;</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">https://DOC-EXAMPLE BUCKET.s3.amazonaws.com/large-test-file</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">   </span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E2F2">&quot;</span><span style="color: #97E1F1">Key</span><span style="color: #97E2F2">&quot;</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">large-test-file</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span></code></pre></div>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="122" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.31.56-PM-1024x122.png" alt="" class="wp-image-2471" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.31.56-PM-1024x122.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.31.56-PM-300x36.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.31.56-PM-768x91.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.31.56-PM-1536x183.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.31.56-PM-2048x244.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.31.56-PM-380x45.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.31.56-PM-800x95.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.31.56-PM-1160x138.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.31.56-PM.png 3194w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 id="resolve-upload-failures" class="wp-block-heading">Resolve upload failures</h2>



<p class="wp-block-paragraph">1. Chạy lệnh sau để xem tất cả multipart-upload chưa hoàn thành</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="aws s3api list-multipart-uploads --bucket DOC-EXAMPLE-BUCKET" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3api</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">list-multipart-uploads</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--bucket</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">DOC-EXAMPLE-BUCKET</span></span></code></pre></div>



<pre class="wp-block-code"><code>{
  "Uploads": &#91;
    {     
      "Initiator": {
        "DisplayName": "multipartmessage",
        "ID": "290xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      },
      "Initiated": "2016-03-31T06:13:15.000Z",
      "UploadId": "examplevQpHp7eHc_J5s9U.kzM3GAHeOJh1P8wVTmRqEVojxxu...",
      "StorageClass": "STANDARD", 
      "Key": "",
      "Owner": {
        "DisplayName": "multipartmessage",
        "ID": "290xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      }
    }
  ]
}</code></pre>



<p class="wp-block-paragraph">2. Chạy lệnh sau để remove UploadID chưa hoàn thành</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="aws s3api abort-multipart-upload --bucket DOC-EXAMPLE-BUCKET --key Key --upload-id UploadID" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3api</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">abort-multipart-upload</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--bucket</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">DOC-EXAMPLE-BUCKET</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Key</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--upload-id</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">UploadID</span></span></code></pre></div>



<h2 id="tai-lieu-tham-khao" class="wp-block-heading">Tài liệu tham khảo</h2>



<ul class="wp-block-list">
<li><a href="https://repost.aws/knowledge-center/s3-multipart-upload-cli">https://repost.aws/knowledge-center/s3-multipart-upload-cli</a></li>
</ul>
<p>The post <a href="https://blog.tomosia.com.vn/upload-file-len-amazon-s3-dung-multipart-upload-vs-aws-cli/">Upload File Lên Amazon S3: Dùng Multipart Upload vs AWS CLI</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/upload-file-len-amazon-s3-dung-multipart-upload-vs-aws-cli/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Forward proxy vs. Reverse proxy</title>
		<link>https://blog.tomosia.com.vn/forward-proxy-vs-reverse-proxy/</link>
					<comments>https://blog.tomosia.com.vn/forward-proxy-vs-reverse-proxy/#comments</comments>
		
		<dc:creator><![CDATA[admin_tomosia]]></dc:creator>
		<pubDate>Fri, 08 Dec 2023 03:36:29 +0000</pubDate>
				<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[Web server]]></category>
		<category><![CDATA[security]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=2428</guid>

					<description><![CDATA[<p>Trong mạng máy tính, proxy là một máy chủ trung gian giữa client và các server khác trên&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/forward-proxy-vs-reverse-proxy/">Forward proxy vs. Reverse proxy</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Trong mạng máy tính, proxy là một máy chủ trung gian giữa client và các server khác trên Internet. Khi client gửi yêu cầu đến server, request sẽ được gửi đến proxy trước. Sau đó, proxy sẽ gửi request đến server thay cho client và trả về response cho client.</p>



<h2 id="tai-sao-lai-can-co-proxy" class="wp-block-heading">Tại sao lại cần có proxy?</h2>



<p class="wp-block-paragraph">Thay vì kết nối trực tiếp tới server, client gửi request đến proxy để đánh giá và thực hiện những request đó.</p>



<ul class="wp-block-list">
<li><strong>Bảo vệ quyền riêng tư:</strong>&nbsp;Proxy có thể được sử dụng để ẩn địa chỉ IP của client,&nbsp;giúp bảo vệ quyền riêng tư của người dùng khỏi các trang web và ứng dụng mà họ truy cập.</li>



<li><strong>Cân bằng tải (Load balancing):</strong>&nbsp;Proxy có thể được sử dụng để phân phối lưu lượng truy cập giữa nhiều server,&nbsp;giúp cải thiện hiệu suất và độ tin cậy của hệ thống.</li>



<li><strong>Bảo mật (Security):</strong>&nbsp;Proxy có thể được sử dụng để lọc lưu lượng truy cập,&nbsp;giúp ngăn chặn các cuộc tấn công mạng.</li>



<li><strong>Giảm chi phí:</strong>&nbsp;Proxy có thể được sử dụng để truy cập các tài nguyên từ xa,&nbsp;giúp giảm chi phí cho doanh nghiệp.</li>
</ul>



<p class="wp-block-paragraph">Có 2 loại proxy thường gặp đó là Forward proxy và Reverse proxy.</p>



<h2 id="forward-proxy" class="wp-block-heading">Forward proxy</h2>



<ul class="wp-block-list">
<li>Là một&nbsp;<em>client proxy</em>, hoạt động thay mặt cho các thiết bị clients để gửi yêu cầu đến server.</li>



<li>Nó <strong>nằm giữa clients và Internet</strong>, chuyển tiếp các requests của clients đến server thông qua Internet.</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="512" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/forward_proxy_flow-1024x512.png" alt="" class="wp-image-2437" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/forward_proxy_flow-1024x512.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/forward_proxy_flow-300x150.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/forward_proxy_flow-768x384.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/forward_proxy_flow-1536x768.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/forward_proxy_flow-2048x1024.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/forward_proxy_flow-380x190.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/forward_proxy_flow-800x400.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/forward_proxy_flow-1160x580.png 1160w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h4 id="use-cases" class="wp-block-heading">Use cases:</h4>



<ul class="wp-block-list">
<li><strong>Access control and content filtering: </strong>forward proxy kiểm tra các request có hợp lệ hay không để thực hiện forward hoặc block request.</li>



<li><strong>Log/Monitor request</strong>: quản lý và giám sát các request, thường được sử dụng trong môi trường công ty, trường học hay các tổ chức để kiểm soát việc truy cập Internet và bảo vệ khỏi các nội dung độc hại.</li>



<li><strong>User</strong> <strong>Privacy</strong>: forward proxy nằm giữa client và Internet, nó thay mặt client gửi request đến server qua Internet, có thể che dấu danh tính, địa chỉ IP và bảo vệ quyền riêng tư của người dùng thực.</li>



<li><strong>Cache responses</strong>: giảm độ trễ, tăng performance, tối ưu bandwidth, proxy cache lại response để trả về cho client trong các lần request tiếp theo thay vì request trực tiếp đến server.</li>
</ul>



<h4 id="services" class="wp-block-heading">Services:</h4>



<ul class="wp-block-list">
<li>Squid</li>



<li>Privoxy</li>



<li>VPN services</li>



<li>Cloudflare WARP</li>
</ul>



<p class="wp-block-paragraph"></p>



<h2 id="reverse-proxy" class="wp-block-heading">Reverse proxy</h2>



<ul class="wp-block-list">
<li>Là một <em>server proxy,</em> <strong>nằm giữa Internet và server</strong> để xử lý các request thay mặt cho server.</li>



<li>Chúng hoạt động như những servers bình thường. <strong>Reverse proxy</strong> chuyển tiếp request đến một hoặc nhiều server thật, kết quả sau đó trả về cho client, làm cho client không biết về những server thật nói trên.</li>



<li><strong>Reverse proxy</strong> được cài đặt trong một private network của một hoặc nhiều server, và tất cả lưu lượng truy cập đều phải đi qua proxy này.</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="512" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/reverse_proxy_flow-1024x512.png" alt="" class="wp-image-2440" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/reverse_proxy_flow-1024x512.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/reverse_proxy_flow-300x150.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/reverse_proxy_flow-768x384.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/reverse_proxy_flow-1536x768.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/reverse_proxy_flow-2048x1024.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/reverse_proxy_flow-380x190.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/reverse_proxy_flow-800x400.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/reverse_proxy_flow-1160x580.png 1160w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h4 id="use-cases-2" class="wp-block-heading">Use cases:</h4>



<ul class="wp-block-list">
<li><strong>Load Balancing:</strong> cân bằng tải, phân bổ lượng truy cập trang web đến các máy chủ khác nhau, nhằm mục đích tăng throughput, giảm letancy, phục vụ số lượng client lớn hơn.</li>



<li><strong>Security</strong>: có thể coi <strong>reverse proxy</strong> là một Web Application Firewall (WAF), có nhiệm vụ chặn các truy cập khả nghi đến server, làm rate limit, một phần nào đó ngăn chặn tấn công DDoS.</li>



<li><strong>Cache responses</strong>: giảm độ trễ, tăng performance, tối ưu bandwidth, proxy cache lại response để trả về cho client trong các lần request tiếp theo thay vì request trực tiếp đến server.</li>



<li><strong>SSL encryption/decryption</strong>: <strong>reverse proxy</strong> có thể xử lý việc SSL termination (dừng), giải mã lưu lượng được mã hóa SSL từ client và chuyển tiếp nó đến máy chủ phụ trợ ở dạng không được mã hóa và ngược lại.</li>
</ul>



<h4 id="services-2" class="wp-block-heading">Services:</h4>



<ul class="wp-block-list">
<li>Nginx</li>



<li>Apache HTTP</li>



<li>HAProxy</li>



<li>CDN services</li>
</ul>



<p class="wp-block-paragraph"></p>



<h2 id="diem-khac-biet-chinh" class="wp-block-heading"><strong>Điểm khác biệt chính</strong></h2>



<ul class="wp-block-list">
<li>Forward proxy: 
<ul class="wp-block-list">
<li>Xử lý request từ client tới Internet.</li>



<li>Bảo vệ quyền riêng tư client và lọc nội dung.</li>
</ul>
</li>



<li>Reverse proxy:
<ul class="wp-block-list">
<li>Xử lý request từ Internet tới web servers.</li>



<li>Performance và security.</li>
</ul>
</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="963" height="1024" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/257642d6-9742-432b-9ca8-2a866dea04dd_1445x1536-963x1024.jpg" alt="" class="wp-image-2445" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/257642d6-9742-432b-9ca8-2a866dea04dd_1445x1536-963x1024.jpg 963w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/257642d6-9742-432b-9ca8-2a866dea04dd_1445x1536-282x300.jpg 282w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/257642d6-9742-432b-9ca8-2a866dea04dd_1445x1536-768x816.jpg 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/257642d6-9742-432b-9ca8-2a866dea04dd_1445x1536-380x404.jpg 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/257642d6-9742-432b-9ca8-2a866dea04dd_1445x1536-800x850.jpg 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/257642d6-9742-432b-9ca8-2a866dea04dd_1445x1536-1160x1233.jpg 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/257642d6-9742-432b-9ca8-2a866dea04dd_1445x1536.jpg 1445w" sizes="auto, (max-width: 963px) 100vw, 963px" /></figure>



<p class="has-small-font-size wp-block-paragraph"><em>Nguồn: <a href="https://blog.bytebytego.com">https://blog.bytebytego.com</a></em></p>



<p class="wp-block-paragraph">Cảm ơn mọi người đã dành thời gian để đọc 🙇‍♂️</p>
<p>The post <a href="https://blog.tomosia.com.vn/forward-proxy-vs-reverse-proxy/">Forward proxy vs. Reverse proxy</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/forward-proxy-vs-reverse-proxy/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Cài đặt nginx trên Amazon Linux 2 (ECS Optimized)</title>
		<link>https://blog.tomosia.com.vn/cai-dat-nginx-tren-amazon-linux-2-ecs-optimized/</link>
					<comments>https://blog.tomosia.com.vn/cai-dat-nginx-tren-amazon-linux-2-ecs-optimized/#comments</comments>
		
		<dc:creator><![CDATA[Nguyen Anh]]></dc:creator>
		<pubDate>Fri, 24 Nov 2023 06:43:30 +0000</pubDate>
				<category><![CDATA[Kinh nghiệm]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[AWS]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=1978</guid>

					<description><![CDATA[<p>Đối với một số bài toàn sử dụng ECS docker và muốn chạy nhiều dịch vụ trên một&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/cai-dat-nginx-tren-amazon-linux-2-ecs-optimized/">Cài đặt nginx trên Amazon Linux 2 (ECS Optimized)</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Đối với một số bài toàn sử dụng ECS docker và muốn chạy nhiều dịch vụ trên một EC2 để tiết kiệm chi phí thì đôi lúc chúng ta cần setup nginx và đây là cách hướng dẫn. Trong bài toán này hệ thống sử dụng ECS và EC2 Amazon Linux 2 (ECS Optimized).</p>



<p class="wp-block-paragraph">1. <strong>Sử dụng kho lưu trữ Extra Packages for Enterprise Linux (EPEL)</strong>:</p>



<p class="wp-block-paragraph">Kho lưu trữ EPEL thường chứa các gói phần mềm bổ sung mà có thể không có sẵn trong các kho lưu trữ mặc định của Amazon Linux.</p>



<p class="wp-block-paragraph">Đầu tiên, cài đặt kho lưu trữ EPEL:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">JavaScript</span><span role="button" tabindex="0" data-code="sudo amazon-linux-extras install epel -y" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">sudo amazon</span><span style="color: #F286C4">-</span><span style="color: #F6F6F4">linux</span><span style="color: #F286C4">-</span><span style="color: #F6F6F4">extras install epel </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4">y</span></span></code></pre></div>



<p class="wp-block-paragraph">2<strong>. Cài đặt Nginx</strong>:</p>



<p class="wp-block-paragraph">Sau khi thêm kho lưu trữ EPEL, bạn có thể thử cài đặt Nginx bằng <code>yum</code>:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">JavaScript</span><span role="button" tabindex="0" data-code="sudo yum install nginx -y" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">sudo yum install nginx </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4">y</span></span></code></pre></div>



<p class="wp-block-paragraph">3. <strong>Khởi động và Kích hoạt Nginx</strong>:</p>



<p class="wp-block-paragraph">Sau khi cài đặt, khởi động và kích hoạt dịch vụ Nginx:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">JavaScript</span><span role="button" tabindex="0" data-code="sudo systemctl start nginx
sudo systemctl enable nginx" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">sudo systemctl start nginx</span></span>
<span class="line"><span style="color: #F6F6F4">sudo systemctl enable nginx</span></span></code></pre></div>



<p class="wp-block-paragraph">4. <strong>Kiểm tra Trạng thái Nginx</strong>:</p>



<p class="wp-block-paragraph">Kiểm tra trạng thái của dịch vụ Nginx để xác nhận rằng nó đang chạy:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">JavaScript</span><span role="button" tabindex="0" data-code="sudo systemctl status nginx" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">sudo systemctl status nginx</span></span></code></pre></div>
<p>The post <a href="https://blog.tomosia.com.vn/cai-dat-nginx-tren-amazon-linux-2-ecs-optimized/">Cài đặt nginx trên Amazon Linux 2 (ECS Optimized)</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/cai-dat-nginx-tren-amazon-linux-2-ecs-optimized/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Logrotate: Compress và push file log lên S3</title>
		<link>https://blog.tomosia.com.vn/logrotate-compress-va-push-file-log-len-s3/</link>
					<comments>https://blog.tomosia.com.vn/logrotate-compress-va-push-file-log-len-s3/#comments</comments>
		
		<dc:creator><![CDATA[Thuc Phan]]></dc:creator>
		<pubDate>Wed, 22 Nov 2023 01:54:57 +0000</pubDate>
				<category><![CDATA[Web Server]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Solution]]></category>
		<category><![CDATA[logrotate]]></category>
		<category><![CDATA[nginx]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=1939</guid>

					<description><![CDATA[<p>Log files giúp bạn hiểu rõ về lịch sử hoạt động của máy chủ nhưng chúng có thể&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/logrotate-compress-va-push-file-log-len-s3/">Logrotate: Compress và push file log lên S3</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Log files giúp bạn hiểu rõ về lịch sử hoạt động của máy chủ nhưng chúng có thể trở nên nặng nề và khó quản lý</p>



<p class="wp-block-paragraph">Logrotate không chỉ giúp giảm kích thước file log một cách tự động mà còn có thể nén file để tiết kiệm không gian lưu trữ</p>



<p class="wp-block-paragraph">Trong bài viết này, chúng ta sẽ tìm hiểu cách Logrotate được cấu hình để tự động nén và đẩy file lên S3, giúp bạn duy trì hệ thống được sạch sẽ và dễ quản lý hơn</p>



<h2 id="config" class="wp-block-heading">Config</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="cd /etc/logrotate.d
touch rails_log_rotation" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #97E1F1">cd</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">/etc/logrotate.d</span></span>
<span class="line"><span style="color: #62E884">touch</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">rails_log_rotation</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="/home/ubuntu/path-to-deploy/current/log/production.log {
  daily
  dateext
  missingok
  rotate 90
  compress
  copytruncate
  lastaction
    aws s3 sync /home/ubuntu/path-to-deploy/current/log/ s3://path-to-bucket-name --exclude &quot;*&quot; --include &quot;production.log*.gz&quot; 2&gt;&amp;1
  endscript
  create 0644 root root
  su root root
}" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">/home/ubuntu/path-to-deploy/current/log/production.log</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">{</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #62E884">daily</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #62E884">dateext</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #62E884">missingok</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #62E884">rotate</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">90</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #62E884">compress</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #62E884">copytruncate</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #62E884">lastaction</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">sync</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">/home/ubuntu/path-to-deploy/current/log/</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3://path-to-bucket-name</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--exclude</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">*</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--include</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">production.log*.gz</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">2&gt;&amp;1</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #62E884">endscript</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #62E884">create</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">0644</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">root</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">root</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #62E884">su</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">root</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">root</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span></code></pre></div>



<p class="wp-block-paragraph"><code><strong>home/ubuntu/path-to-deploy/current/log/production.log</strong></code></p>



<ul class="wp-block-list">
<li>Link đến file log cần được quản lý bởi logrotate</li>
</ul>



<p class="wp-block-paragraph"><code><strong>daily</strong></code></p>



<ul class="wp-block-list">
<li>Thực hiện xoay vòng log hàng ngày (được thực hiện bằng cron-job)</li>
</ul>



<ul class="wp-block-list">
<li>Có nghĩa là file <code>/home/ubuntu/path-to-deploy/current/log/production.log</code> sẽ được làm mới mỗi ngày</li>
</ul>



<ul class="wp-block-list">
<li>Check cron configuration</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="cd /etc/
ls | grep cron
cron.d
cron.daily
cron.hourly
cron.monthly
cron.weekly
crontab" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #97E1F1">cd</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">/etc/</span></span>
<span class="line"><span style="color: #62E884">ls</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">|</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">grep</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">cron</span></span>
<span class="line"><span style="color: #62E884">cron.d</span></span>
<span class="line"><span style="color: #62E884">cron.daily</span></span>
<span class="line"><span style="color: #62E884">cron.hourly</span></span>
<span class="line"><span style="color: #62E884">cron.monthly</span></span>
<span class="line"><span style="color: #62E884">cron.weekly</span></span>
<span class="line"><span style="color: #62E884">crontab</span></span></code></pre></div>



<p class="wp-block-paragraph"><code><strong>dateext</strong></code></p>



<ul class="wp-block-list">
<li>Thêm ngày vào filename của file log được xoay vòng để đảm bảo không bị trùng tên</li>
</ul>



<p class="wp-block-paragraph"><code><strong>missingok</strong></code></p>



<ul class="wp-block-list">
<li>Cho phép logrotate bỏ qua nếu không tìm thấy file</li>
</ul>



<p class="wp-block-paragraph"><code><strong>rotate 90</strong></code></p>



<ul class="wp-block-list">
<li>Giữ lại tối đa 90 file logs đã quay vòng</li>



<li>Trong trường hợp này, có thể hiểu là cho phép lưu trữ file logs của 90 ngày gần nhất</li>
</ul>



<p class="wp-block-paragraph"><code><strong>compress</strong></code></p>



<ul class="wp-block-list">
<li>Nén file log đã xoay vòng để tiết kiệm không gian lưu trữ</li>
</ul>



<p class="wp-block-paragraph"><code><strong>copytruncate</strong></code></p>



<ul class="wp-block-list">
<li>Sao chép nội dung từ file cũ vào file mới, sau đó quay lại đầu file cũ và cắt bớt nó. Điều này giúp logrotate có thể xoay vòng mà không làm ảnh hưởng đến ứng dụng đang chạy</li>
</ul>



<p class="wp-block-paragraph"><code><strong>lastaction</strong></code> và <code><strong>endscript</strong></code> </p>



<ul class="wp-block-list">
<li>Bọc một đoạn code hoặc command được thực thi sau khi xoay vòng</li>



<li>Trong trường hợp này, sử dụng AWS CLI để đồng bộ hóa các file logs đã xoay vòng với Amazon S3</li>



<li>Loại trừ tất cả các files, chỉ bao gồm các file logs đã nén <code>(production.log*.gz)</code></li>



<li>Lưu ý
<ul class="wp-block-list">
<li>Bạn cần thay thế <code>path-to-bucket-name</code> bằng đường dẫn thích hợp đến S3 Bucket của bạn</li>



<li>EC2 phải tương tác được với S3 Bucket của bạn (có thể dùng <code>aws configure</code> hoặc <code>attached IAM role</code> đều được)</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph"><code><strong>create 0644 root root</strong></code></p>



<ul class="wp-block-list">
<li>Tạo một file log mới với quyền truy cập <code>0644</code> và chủ sở hữu là <code>root</code></li>
</ul>



<p class="wp-block-paragraph"><code><strong>su root root</strong></code></p>



<ul class="wp-block-list">
<li>Chuyển quyền sở hữu của file sang <code>root</code> sau khi tạo mới để đảm bảo an toàn và bảo mật</li>
</ul>



<p class="wp-block-paragraph"><strong>Tóm lại</strong></p>



<ul class="wp-block-list">
<li>Config này giúp bạn quản lý và tự động xoay vòng file <code>production.log</code> mỗi ngày</li>



<li>Nén file để tiết kiệm không gian và đồng thời sao chép lên Amazon S3 để lưu trữ</li>
</ul>



<p class="wp-block-paragraph"><strong>Manual test config</strong></p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="sudo logrotate -f /etc/logrotate.conf" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">logrotate</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-f</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">/etc/logrotate.conf</span></span></code></pre></div>
<p>The post <a href="https://blog.tomosia.com.vn/logrotate-compress-va-push-file-log-len-s3/">Logrotate: Compress và push file log lên S3</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/logrotate-compress-va-push-file-log-len-s3/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
		<item>
		<title>[ROR] Hướng dẫn setup CircleCI &#038; Code Quality</title>
		<link>https://blog.tomosia.com.vn/ror-huong-dan-setup-circleci-code-quality/</link>
					<comments>https://blog.tomosia.com.vn/ror-huong-dan-setup-circleci-code-quality/#comments</comments>
		
		<dc:creator><![CDATA[Thuan Nguyen Van]]></dc:creator>
		<pubDate>Wed, 22 Nov 2023 01:28:06 +0000</pubDate>
				<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[CI/CD]]></category>
		<category><![CDATA[Ruby On Rails]]></category>
		<category><![CDATA[Circle CI]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=1808</guid>

					<description><![CDATA[<p>Step 1: Access https://circleci.com/ and authorize a Github, Gitlab or Bitbucket account. I will use a Github account.&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/ror-huong-dan-setup-circleci-code-quality/">[ROR] Hướng dẫn setup CircleCI &#038; Code Quality</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>Step 1:</strong> Access <a href="https://circleci.com/">https://circleci.com/</a> and authorize a Github, Gitlab or Bitbucket account. I will use a Github account.</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh7-us.googleusercontent.com/4-a7bO8VFdZjsOip_gK60WMFnOZJ0dD1PwI8ykJHCpPzJs-jjSvZekKGaQc7yth9dUIbdztuP4NDEC1F-xZMe7RDDys9RCbHf9EVDAIUCbvV2f9wvw-ZeUZH29uU_I72eS59O0zAyeOl88ueOYbhTw" alt=""/></figure>



<p class="wp-block-paragraph"><strong>Step 2</strong>: Click <strong>Go to Application </strong>in Home page -&gt; Projects</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="671" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.46.25-1024x671.png" alt="" class="wp-image-1828" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.46.25-1024x671.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.46.25-300x197.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.46.25-768x503.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.46.25-1536x1007.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.46.25-2048x1342.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.46.25-380x249.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.46.25-800x524.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.46.25-1160x760.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.46.25.png 2206w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>Step 3</strong>: Click to Setup Project button in the right Repo you want to setup</p>



<p class="wp-block-paragraph"><strong>Step 4</strong>: Select first Radio Button -&gt; Set Up Project</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="960" height="820" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.46.54.png" alt="" class="wp-image-1830" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.46.54.png 960w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.46.54-300x256.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.46.54-768x656.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.46.54-380x325.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.46.54-800x683.png 800w" sizes="auto, (max-width: 960px) 100vw, 960px" /></figure>



<p class="wp-block-paragraph">After setup, click <strong>Dashboard </strong>and display as below</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="555" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.49.23-1024x555.png" alt="" class="wp-image-1831" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.49.23-1024x555.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.49.23-300x163.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.49.23-768x417.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.49.23-1536x833.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.49.23-2048x1111.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.49.23-380x206.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.49.23-800x434.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.49.23-1160x629.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-15-at-08.49.23.png 2360w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>Step 5</strong>: Click <strong>Project Setting -&gt; SSH Key </strong>and check if the ssh key has been linked or not.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="602" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.37.42-2-1024x602.png" alt="" class="wp-image-1926" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.37.42-2-1024x602.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.37.42-2-300x176.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.37.42-2-768x452.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.37.42-2-1536x903.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.37.42-2-380x223.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.37.42-2-800x471.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.37.42-2-1160x682.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.37.42-2.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Step 6: <strong>If you using Git Submodule,</strong> please create a Additional SSH Keys</p>



<ol class="wp-block-list">
<li>Open terminal and run <strong><code>ssh-keygen -t ed25519 -C "Circle CI".</code></strong></li>



<li>Click Add SSH Key and enter</li>
</ol>



<ul class="wp-block-list">
<li>Hostname: <strong>github.com</strong></li>



<li>Private Key: cat <strong>minh_id_ed25519</strong>, copy and paste</li>
</ul>



<ol class="wp-block-list" start="3">
<li>Back to Github, select Repository <strong>Shared submodule</strong> -&gt; <strong>Settings</strong> -&gt; <strong>Deploy Keys</strong> -&gt; <strong>Add deploy key</strong></li>



<li>Enter Title and Key -&gt; <strong>Add Key</strong></li>
</ol>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="524" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.38.40-3-1024x524.png" alt="" class="wp-image-1927" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.38.40-3-1024x524.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.38.40-3-300x154.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.38.40-3-768x393.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.38.40-3-1536x786.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.38.40-3-380x195.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.38.40-3-800x410.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.38.40-3-1160x594.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.38.40-3.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image"><img decoding="async" src="https://lh7-us.googleusercontent.com/DMqD1X_4hArkrqNjTitIIFNRe2HXnxxUpBu37aJgAH9XYYzgoDI2aE7GX8VLqt8cmKZiCl1EV0Nq_p7A7eOGg0ISwUcWUK-LdAqZdLg0heEL8GCH1qzpQI0lAHQxrtRcWJgnnSufCW9wVii8a7HUZQ" alt=""/></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="810" height="511" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.48.56.png" alt="" class="wp-image-1928" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.48.56.png 810w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.48.56-300x189.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.48.56-768x485.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.48.56-380x240.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-10.48.56-800x505.png 800w" sizes="auto, (max-width: 810px) 100vw, 810px" /></figure>



<p class="wp-block-paragraph"><strong>Step 7</strong>: Back to project setup config CircleCI and Danger</p>



<ol class="wp-block-list">
<li>Add to Gemfile</li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Ruby</span><span role="button" tabindex="0" data-code="gem 'brakeman', require: false
gem 'danger', '9.2.0'
# A Danger plugin to lint Ruby files through danger-brakeman_scanner.&lt;/em&gt;
gem 'danger-brakeman_scanner', '0.1.1'
# A Danger plugin to lint Ruby files through rails_best_practices.&lt;/em&gt;
gem 'danger-rails_best_practices', '0.1.3'
# A Danger plugin to lint Ruby files through Reek.&lt;/em&gt;
gem 'danger-reek', '0.3.0'
# A Danger plugin for running Ruby files through Rubocop.&lt;/em&gt;
gem 'danger-rubocop', '0.10.0'
# A Danger plugin to report code coverage generated by SimpleCov in JSON format.&lt;/em&gt;
gem 'danger-simplecov_json', '0.3.0'" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">gem </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">brakeman</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">, require</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">false</span></span>
<span class="line"><span style="color: #F6F6F4">gem </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">danger</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">, </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">9.2.0</span><span style="color: #DEE492">&#39;</span></span>
<span class="line"><span style="color: #7B7F8B"># A Danger plugin to lint Ruby files through danger-brakeman_scanner.&lt;/em&gt;</span></span>
<span class="line"><span style="color: #F6F6F4">gem </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">danger-brakeman_scanner</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">, </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">0.1.1</span><span style="color: #DEE492">&#39;</span></span>
<span class="line"><span style="color: #7B7F8B"># A Danger plugin to lint Ruby files through rails_best_practices.&lt;/em&gt;</span></span>
<span class="line"><span style="color: #F6F6F4">gem </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">danger-rails_best_practices</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">, </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">0.1.3</span><span style="color: #DEE492">&#39;</span></span>
<span class="line"><span style="color: #7B7F8B"># A Danger plugin to lint Ruby files through Reek.&lt;/em&gt;</span></span>
<span class="line"><span style="color: #F6F6F4">gem </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">danger-reek</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">, </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">0.3.0</span><span style="color: #DEE492">&#39;</span></span>
<span class="line"><span style="color: #7B7F8B"># A Danger plugin for running Ruby files through Rubocop.&lt;/em&gt;</span></span>
<span class="line"><span style="color: #F6F6F4">gem </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">danger-rubocop</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">, </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">0.10.0</span><span style="color: #DEE492">&#39;</span></span>
<span class="line"><span style="color: #7B7F8B"># A Danger plugin to report code coverage generated by SimpleCov in JSON format.&lt;/em&gt;</span></span>
<span class="line"><span style="color: #F6F6F4">gem </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">danger-simplecov_json</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">, </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">0.3.0</span><span style="color: #DEE492">&#39;</span></span></code></pre></div>



<ol class="wp-block-list" start="2">
<li>Create file in <strong>.circleci/config.yml</strong> and paste code</li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:25.296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Ruby</span><span role="button" tabindex="0" data-code="# Best practises:
#   [https://www.netguru.com/blog/top-10-best-practises-to-benefit-more-form-circleci]
#   [https://circleci.com/blog/six-optimization-tips-for-your-config/]
references:
  working_directory: &amp;working_directory ~/quinblog
  images:
    base_image: &amp;base_image
      image: cimg/ruby:3.2.1
      environment:
        TZ: /usr/share/zoneinfo/Asia/Tokyo
        BUNDLE_JOBS: 4
        BUNDLE_RETRY: 3
        BUNDLE_PATH: vendor/bundle
        GEM_PATH: vendor/bundle
        RAILS_ENV: test
    db_image: &amp;db_image
      image: cimg/postgres:14.4
      environment:
        POSTGRES_USER: postgres
        POSTGRES_DB: quinblog_test
        POSTGRES_PASSWORD: postgres
    redis_image: &amp;redis_image
      image: cimg/redis:5.0
    mongodb_image: &amp;mongodb_image
      image: circleci/mongo:3.6
  commands:
    move_database_yml: &amp;move_database_yml
      name: Move database_yml
      command: mv config/database.ci.yml config/database.yml
    move_mongoid_yml: &amp;move_mongoid_yml
      name: Move mongoid_yml
      command: mv config/mongoid.ci.yml config/mongoid.yml
    sync_git_submodule: &amp;sync_git_submodule
      name: Sync git submodule
      command: |
        git submodule sync --recursive --quiet
        git submodule update --init --checkout --recursive --quiet

# Use the latest 2.1 version of CircleCI pipeline process engine.
# See: https://circleci.com/docs/2.0/configuration-reference
version: 2.1

# Orbs are reusable packages of CircleCI configuration that you may share across projects, enabling you to create encapsulated, parameterized commands, jobs, and executors that can be used across multiple projects.
# See: https://circleci.com/docs/2.0/orb-intro/
orbs:
  ruby: circleci/ruby@1.8.0

# Define a job to be invoked later in a workflow.
# See: https://circleci.com/docs/2.0/configuration-reference/#jobs
jobs:
  build:
    working_directory: *working_directory
    resource_class: small
    parallelism: 1
    docker:
      - *base_image
    steps:
      - add_ssh_keys:
          fingerprints:
            - '7c:72:77:4f:79:12:cb:af:c9:84:7b:d1:ab:24:69:41'
      - checkout

      - run: *move_database_yml
      - run: *move_mongoid_yml
      - run: *sync_git_submodule
      - run:
          name: Disabled auto completion
          command: echo 'IRB.conf[:USE_AUTOCOMPLETE] = false' &gt;&gt; ~/.irbrc

      # Restoring and saving cache
      - ruby/install-deps

      - persist_to_workspace:
          root: *working_directory
          paths:
            - ./*

  test:
    working_directory: *working_directory
    resource_class: small
    parallelism: 2
    docker:
      - *base_image
      - *db_image
      - *mongodb_image
      - *redis_image
    steps:
      - attach_workspace:
          at: *working_directory

      - run:
          name: Wait for Postgres DB
          command: dockerize -wait tcp://localhost:5432 -timeout 1m

      - run:
          name: Wait for Mongo DB
          command: dockerize -wait tcp://localhost:27017 -timeout 1m

      - run:
          name: Wait for Redis DB
          command: dockerize -wait tcp://localhost:6379 -timeout 1m

      - run:
          name: Migration DB
          command: |
            bundle exec rails db:schema:load:primary --trace
            bundle exec rails db:create:universal
            bundle exec rails db:schema:load:universal --trace

      - run:
          name: Run rspec
          command: |
            TESTFILES=$(circleci tests glob &quot;spec/**/*_spec.rb&quot; | circleci tests split --split-by=timings --timings-type=classname)
            echo ${TESTFILES}
            bundle exec rspec --profile 10 \
                              --format progress \
                              --format RspecJunitFormatter --out /tmp/test-results/rspec/rspec.xml \
                              ${TESTFILES}

      # Collect test data
      # See: https://circleci.com/docs/collect-test-data
      # See: https://circleci.com/blog/how-to-output-junit-tests-through-circleci-2-0-for-expanded-insights/
      - store_test_results:
          path: /tmp/test-results/rspec/

      - run:
          name: Run danger
          command: bundle exec danger --danger_id=test

  lint:
    working_directory: *working_directory
    resource_class: small
    parallelism: 1
    docker:
      - *base_image
    steps:
      - attach_workspace:
          at: *working_directory

      - run:
          name: Run danger
          command: bundle exec danger --danger_id=lint

# Invoke jobs via workflows
# See: https://circleci.com/docs/2.0/configuration-reference/#workflows
workflows:
  build_and_test:
    jobs:
      - build
      - test:
          context:
            - ctx_renew_api_company
          requires:
            - build
      - lint:
          context:
            - ctx_renew_api_company
          requires:
            - build
" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #7B7F8B"># Best practises:</span></span>
<span class="line"><span style="color: #7B7F8B">#   [https://www.netguru.com/blog/top-10-best-practises-to-benefit-more-form-circleci]</span></span>
<span class="line"><span style="color: #7B7F8B">#   [https://circleci.com/blog/six-optimization-tips-for-your-config/]</span></span>
<span class="line"><span style="color: #F6F6F4">references</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">  working_directory</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">&amp;</span><span style="color: #F6F6F4">working_directory </span><span style="color: #F286C4">~</span><span style="color: #E7EE98">/quinblog</span></span>
<span class="line"><span style="color: #E7EE98">  images:</span></span>
<span class="line"><span style="color: #E7EE98">    base_image: &amp;base_image</span></span>
<span class="line"><span style="color: #E7EE98">      image: cimg/</span><span style="color: #F6F6F4">ruby</span><span style="color: #F286C4">:</span><span style="color: #BF9EEE">3.2</span><span style="color: #F6F6F4">.</span><span style="color: #BF9EEE">1</span></span>
<span class="line"><span style="color: #F6F6F4">      environment</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">        TZ</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">/usr/s</span><span style="color: #F6F6F4">hare</span><span style="color: #F286C4">/</span><span style="color: #F6F6F4">zoneinfo</span><span style="color: #F286C4">/</span><span style="color: #BF9EEE">Asia</span><span style="color: #F286C4">/</span><span style="color: #BF9EEE">Tokyo</span></span>
<span class="line"><span style="color: #F6F6F4">        BUNDLE_JOBS</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">4</span></span>
<span class="line"><span style="color: #F6F6F4">        BUNDLE_RETRY</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">3</span></span>
<span class="line"><span style="color: #F6F6F4">        BUNDLE_PATH</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> vendor</span><span style="color: #F286C4">/</span><span style="color: #F6F6F4">bundle</span></span>
<span class="line"><span style="color: #F6F6F4">        GEM_PATH</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> vendor</span><span style="color: #F286C4">/</span><span style="color: #F6F6F4">bundle</span></span>
<span class="line"><span style="color: #F6F6F4">        RAILS_ENV</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1">test</span></span>
<span class="line"><span style="color: #F6F6F4">    db_image</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">&amp;</span><span style="color: #F6F6F4">db_image</span></span>
<span class="line"><span style="color: #F6F6F4">      image</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> cimg</span><span style="color: #F286C4">/</span><span style="color: #F6F6F4">postgres</span><span style="color: #F286C4">:</span><span style="color: #BF9EEE">14.4</span></span>
<span class="line"><span style="color: #F6F6F4">      environment</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">        POSTGRES_USER</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> postgres</span></span>
<span class="line"><span style="color: #F6F6F4">        POSTGRES_DB</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> quinblog_test</span></span>
<span class="line"><span style="color: #F6F6F4">        POSTGRES_PASSWORD</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> postgres</span></span>
<span class="line"><span style="color: #F6F6F4">    redis_image</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">&amp;</span><span style="color: #F6F6F4">redis_image</span></span>
<span class="line"><span style="color: #F6F6F4">      image</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> cimg</span><span style="color: #F286C4">/</span><span style="color: #F6F6F4">redis</span><span style="color: #F286C4">:</span><span style="color: #BF9EEE">5.0</span></span>
<span class="line"><span style="color: #F6F6F4">    mongodb_image</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">&amp;</span><span style="color: #F6F6F4">mongodb_image</span></span>
<span class="line"><span style="color: #F6F6F4">      image</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> circleci</span><span style="color: #F286C4">/</span><span style="color: #F6F6F4">mongo</span><span style="color: #F286C4">:</span><span style="color: #BF9EEE">3.6</span></span>
<span class="line"><span style="color: #F6F6F4">  commands</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">    move_database_yml</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">&amp;</span><span style="color: #F6F6F4">move_database_yml</span></span>
<span class="line"><span style="color: #F6F6F4">      name</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">Move</span><span style="color: #F6F6F4"> database_yml</span></span>
<span class="line"><span style="color: #F6F6F4">      command</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> mv config</span><span style="color: #F286C4">/</span><span style="color: #F6F6F4">database.ci.yml config</span><span style="color: #F286C4">/</span><span style="color: #F6F6F4">database.yml</span></span>
<span class="line"><span style="color: #F6F6F4">    move_mongoid_yml</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">&amp;</span><span style="color: #F6F6F4">move_mongoid_yml</span></span>
<span class="line"><span style="color: #F6F6F4">      name</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">Move</span><span style="color: #F6F6F4"> mongoid_yml</span></span>
<span class="line"><span style="color: #F6F6F4">      command</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> mv config</span><span style="color: #F286C4">/</span><span style="color: #F6F6F4">mongoid.ci.yml config</span><span style="color: #F286C4">/</span><span style="color: #F6F6F4">mongoid.yml</span></span>
<span class="line"><span style="color: #F6F6F4">    sync_git_submodule</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">&amp;</span><span style="color: #F6F6F4">sync_git_submodule</span></span>
<span class="line"><span style="color: #F6F6F4">      name</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">Sync</span><span style="color: #F6F6F4"> git submodule</span></span>
<span class="line"><span style="color: #F6F6F4">      command</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">|</span></span>
<span class="line"><span style="color: #F6F6F4">        git submodule sync </span><span style="color: #F286C4">--</span><span style="color: #F6F6F4">recursive </span><span style="color: #F286C4">--</span><span style="color: #F6F6F4">quiet</span></span>
<span class="line"><span style="color: #F6F6F4">        git submodule update </span><span style="color: #F286C4">--</span><span style="color: #F6F6F4">init </span><span style="color: #F286C4">--</span><span style="color: #F6F6F4">checkout </span><span style="color: #F286C4">--</span><span style="color: #F6F6F4">recursive </span><span style="color: #F286C4">--</span><span style="color: #F6F6F4">quiet</span></span>
<span class="line"></span>
<span class="line"><span style="color: #7B7F8B"># Use the latest 2.1 version of CircleCI pipeline process engine.</span></span>
<span class="line"><span style="color: #7B7F8B"># See: https://circleci.com/docs/2.0/configuration-reference</span></span>
<span class="line"><span style="color: #F6F6F4">version</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">2.1</span></span>
<span class="line"></span>
<span class="line"><span style="color: #7B7F8B"># Orbs are reusable packages of CircleCI configuration that you may share across projects, enabling you to create encapsulated, parameterized commands, jobs, and executors that can be used across multiple projects.</span></span>
<span class="line"><span style="color: #7B7F8B"># See: https://circleci.com/docs/2.0/orb-intro/</span></span>
<span class="line"><span style="color: #F6F6F4">orbs</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">  ruby</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> circleci</span><span style="color: #F286C4">/</span><span style="color: #F6F6F4">ruby@</span><span style="color: #BF9EEE">1.8</span><span style="color: #F6F6F4">.</span><span style="color: #BF9EEE">0</span></span>
<span class="line"></span>
<span class="line"><span style="color: #7B7F8B"># Define a job to be invoked later in a workflow.</span></span>
<span class="line"><span style="color: #7B7F8B"># See: https://circleci.com/docs/2.0/configuration-reference/#jobs</span></span>
<span class="line"><span style="color: #F6F6F4">jobs</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">  build</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">    working_directory</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">*</span><span style="color: #F6F6F4">working_directory</span></span>
<span class="line"><span style="color: #F6F6F4">    resource_class</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> small</span></span>
<span class="line"><span style="color: #F6F6F4">    parallelism</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">1</span></span>
<span class="line"><span style="color: #F6F6F4">    docker</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">*</span><span style="color: #F6F6F4">base_image</span></span>
<span class="line"><span style="color: #F6F6F4">    steps</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> add_ssh_keys</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">          fingerprints</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">7c:72:77:4f:79:12:cb:af:c9:84:7b:d1:ab:24:69:41</span><span style="color: #DEE492">&#39;</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> checkout</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> run</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">*</span><span style="color: #F6F6F4">move_database_yml</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> run</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">*</span><span style="color: #F6F6F4">move_mongoid_yml</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> run</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">*</span><span style="color: #F6F6F4">sync_git_submodule</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> run</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">          name</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">Disabled</span><span style="color: #F6F6F4"> auto completion</span></span>
<span class="line"><span style="color: #F6F6F4">          command</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> echo </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">IRB.conf[:USE_AUTOCOMPLETE] = false</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">&gt;&gt;</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">~</span><span style="color: #E7EE98">/.irbrc</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E7EE98">      </span><span style="color: #7B7F8B"># Restoring and saving cache</span></span>
<span class="line"><span style="color: #E7EE98">      - ruby/ins</span><span style="color: #F6F6F4">tall</span><span style="color: #F286C4">-</span><span style="color: #F6F6F4">deps</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> persist_to_workspace</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">          root</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">*</span><span style="color: #F6F6F4">working_directory</span></span>
<span class="line"><span style="color: #F6F6F4">          paths</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> .</span><span style="color: #F286C4">/*</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  test</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">    working_directory</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">*</span><span style="color: #F6F6F4">working_directory</span></span>
<span class="line"><span style="color: #F6F6F4">    resource_class</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> small</span></span>
<span class="line"><span style="color: #F6F6F4">    parallelism</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">2</span></span>
<span class="line"><span style="color: #F6F6F4">    docker</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">*</span><span style="color: #F6F6F4">base_image</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">*</span><span style="color: #F6F6F4">db_image</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">*</span><span style="color: #F6F6F4">mongodb_image</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">*</span><span style="color: #F6F6F4">redis_image</span></span>
<span class="line"><span style="color: #F6F6F4">    steps</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> attach_workspace</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">          at</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">*</span><span style="color: #F6F6F4">working_directory</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> run</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">          name</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">Wait</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">for</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">Postgres</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">DB</span></span>
<span class="line"><span style="color: #F6F6F4">          command</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> dockerize </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4">wait tcp</span><span style="color: #F286C4">:</span><span style="color: #E7EE98">//</span><span style="color: #F6F6F4">localhost</span><span style="color: #F286C4">:</span><span style="color: #BF9EEE">5432</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4">timeout 1m</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> run</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">          name</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">Wait</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">for</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">Mongo</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">DB</span></span>
<span class="line"><span style="color: #F6F6F4">          command</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> dockerize </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4">wait tcp</span><span style="color: #F286C4">:</span><span style="color: #E7EE98">//</span><span style="color: #F6F6F4">localhost</span><span style="color: #F286C4">:</span><span style="color: #BF9EEE">27017</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4">timeout 1m</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> run</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">          name</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">Wait</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">for</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">Redis</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">DB</span></span>
<span class="line"><span style="color: #F6F6F4">          command</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> dockerize </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4">wait tcp</span><span style="color: #F286C4">:</span><span style="color: #E7EE98">//</span><span style="color: #F6F6F4">localhost</span><span style="color: #F286C4">:</span><span style="color: #BF9EEE">6379</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4">timeout 1m</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> run</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">          name</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">Migration</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">DB</span></span>
<span class="line"><span style="color: #F6F6F4">          command</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">|</span></span>
<span class="line"><span style="color: #F6F6F4">            bundle </span><span style="color: #97E1F1">exec</span><span style="color: #F6F6F4"> rails db</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4">schema</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4">load</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4">primary </span><span style="color: #F286C4">--</span><span style="color: #F6F6F4">trace</span></span>
<span class="line"><span style="color: #F6F6F4">            bundle </span><span style="color: #97E1F1">exec</span><span style="color: #F6F6F4"> rails db</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4">create</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4">universal</span></span>
<span class="line"><span style="color: #F6F6F4">            bundle </span><span style="color: #97E1F1">exec</span><span style="color: #F6F6F4"> rails db</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4">schema</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4">load</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4">universal </span><span style="color: #F286C4">--</span><span style="color: #F6F6F4">trace</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> run</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">          name</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">Run</span><span style="color: #F6F6F4"> rspec</span></span>
<span class="line"><span style="color: #F6F6F4">          command</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">|</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #BF9EEE">TESTFILES</span><span style="color: #F286C4">=</span><span style="color: #F6F6F4">$(circleci tests glob </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">spec/**/*_spec.rb</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">|</span><span style="color: #F6F6F4"> circleci tests split </span><span style="color: #F286C4">--</span><span style="color: #F6F6F4">split</span><span style="color: #F286C4">-</span><span style="color: #F6F6F4">by</span><span style="color: #F286C4">=</span><span style="color: #F6F6F4">timings </span><span style="color: #F286C4">--</span><span style="color: #F6F6F4">timings</span><span style="color: #F286C4">-</span><span style="color: #F6F6F4">type</span><span style="color: #F286C4">=</span><span style="color: #F6F6F4">classname)</span></span>
<span class="line"><span style="color: #F6F6F4">            echo ${</span><span style="color: #BF9EEE">TESTFILES</span><span style="color: #F6F6F4">}</span></span>
<span class="line"><span style="color: #F6F6F4">            bundle </span><span style="color: #97E1F1">exec</span><span style="color: #F6F6F4"> rspec </span><span style="color: #F286C4">--</span><span style="color: #F6F6F4">profile </span><span style="color: #BF9EEE">10</span><span style="color: #F6F6F4"> \</span></span>
<span class="line"><span style="color: #F6F6F4">                              </span><span style="color: #F286C4">--</span><span style="color: #97E1F1">format</span><span style="color: #F6F6F4"> progress \</span></span>
<span class="line"><span style="color: #F6F6F4">                              </span><span style="color: #F286C4">--</span><span style="color: #97E1F1">format</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">RspecJunitFormatter</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">--</span><span style="color: #F6F6F4">out </span><span style="color: #F286C4">/</span><span style="color: #F6F6F4">tmp</span><span style="color: #F286C4">/</span><span style="color: #97E1F1">test</span><span style="color: #F286C4">-</span><span style="color: #F6F6F4">results</span><span style="color: #F286C4">/</span><span style="color: #F6F6F4">rspec</span><span style="color: #F286C4">/</span><span style="color: #F6F6F4">rspec.xml \</span></span>
<span class="line"><span style="color: #F6F6F4">                              ${</span><span style="color: #BF9EEE">TESTFILES</span><span style="color: #F6F6F4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #7B7F8B"># Collect test data</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #7B7F8B"># See: https://circleci.com/docs/collect-test-data</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #7B7F8B"># See: https://circleci.com/blog/how-to-output-junit-tests-through-circleci-2-0-for-expanded-insights/</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> store_test_results</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">          path</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">/tmp/</span><span style="color: #97E1F1">test</span><span style="color: #F286C4">-</span><span style="color: #F6F6F4">results</span><span style="color: #F286C4">/</span><span style="color: #F6F6F4">rspec</span><span style="color: #F286C4">/</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> run</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">          name</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">Run</span><span style="color: #F6F6F4"> danger</span></span>
<span class="line"><span style="color: #F6F6F4">          command</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> bundle </span><span style="color: #97E1F1">exec</span><span style="color: #F6F6F4"> danger </span><span style="color: #F286C4">--</span><span style="color: #F6F6F4">danger_id</span><span style="color: #F286C4">=</span><span style="color: #97E1F1">test</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  lint</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">    working_directory</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">*</span><span style="color: #F6F6F4">working_directory</span></span>
<span class="line"><span style="color: #F6F6F4">    resource_class</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> small</span></span>
<span class="line"><span style="color: #F6F6F4">    parallelism</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">1</span></span>
<span class="line"><span style="color: #F6F6F4">    docker</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">*</span><span style="color: #F6F6F4">base_image</span></span>
<span class="line"><span style="color: #F6F6F4">    steps</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> attach_workspace</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">          at</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">*</span><span style="color: #F6F6F4">working_directory</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> run</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">          name</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">Run</span><span style="color: #F6F6F4"> danger</span></span>
<span class="line"><span style="color: #F6F6F4">          command</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> bundle </span><span style="color: #97E1F1">exec</span><span style="color: #F6F6F4"> danger </span><span style="color: #F286C4">--</span><span style="color: #F6F6F4">danger_id</span><span style="color: #F286C4">=</span><span style="color: #F6F6F4">lint</span></span>
<span class="line"></span>
<span class="line"><span style="color: #7B7F8B"># Invoke jobs via workflows</span></span>
<span class="line"><span style="color: #7B7F8B"># See: https://circleci.com/docs/2.0/configuration-reference/#workflows</span></span>
<span class="line"><span style="color: #F6F6F4">workflows</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">  build_and_test</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">    jobs</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> build</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> test</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">          context</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> ctx_renew_api_company</span></span>
<span class="line"><span style="color: #F6F6F4">          requires</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> build</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> lint</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">          context</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> ctx_renew_api_company</span></span>
<span class="line"><span style="color: #F6F6F4">          requires</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> build</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph"><strong>Step 8</strong>: Config Danger. Create <strong>Dangerfile</strong> and paste code below:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Ruby</span><span role="button" tabindex="0" data-code="# frozen_string_literal: true

case ENV.fetch('CIRCLE_JOB', nil)

when 'lint'

  ### for Rubocop ###

  rubocop.lint(force_exclusion: true, inline_comment: true)

  ### for rails_best_practices ###

  # rails_best_practices.lint

  ### for Reek ###

  # reek.lint

  ### for brakeman ###

  brakeman.run('.')

  # Ensure there is a summary for a pr

  failure('Please provide a summary in the Pull Request description') if     github.pr_body.include?('___WRITE_HERE___')

  # Ensure that all prs have an assignee

  failure('This PR does not have any assignees yet.') unless github.pr_json['assignee']

  # Warn really big diffs

  warn('We cannot handle the scale of this PR') if git.lines_of_code &gt; 300

  # Note when a pr cannot be manually merged, which goes away when you can

  warn('This PR cannot be merged yet.', sticky: false) unless github.pr_json['mergeable']

 when 'test'

  ### for SimpleCov ###

  coverage_file = 'coverage/coverage.json'

  simplecov.report(coverage_file, sticky: false)

  simplecov.individual_report(coverage_file, Dir.pwd)

end" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #7B7F8B"># frozen_string_literal: true</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">case</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">ENV</span><span style="color: #F6F6F4">.fetch(</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">CIRCLE_JOB</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">, </span><span style="color: #BF9EEE">nil</span><span style="color: #F6F6F4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">when</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">lint</span><span style="color: #DEE492">&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #7B7F8B">### for Rubocop ###</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  rubocop.lint(force_exclusion</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">true</span><span style="color: #F6F6F4">, inline_comment</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">true</span><span style="color: #F6F6F4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #7B7F8B">### for rails_best_practices ###</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #7B7F8B"># rails_best_practices.lint</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #7B7F8B">### for Reek ###</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #7B7F8B"># reek.lint</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #7B7F8B">### for brakeman ###</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  brakeman.run(</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">.</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #7B7F8B"># Ensure there is a summary for a pr</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  failure(</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">Please provide a summary in the Pull Request description</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">) </span><span style="color: #F286C4">if</span><span style="color: #F6F6F4">     github.pr_body.include?(</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">___WRITE_HERE___</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #7B7F8B"># Ensure that all prs have an assignee</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  failure(</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">This PR does not have any assignees yet.</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">) </span><span style="color: #F286C4">unless</span><span style="color: #F6F6F4"> github.pr_json[</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">assignee</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">]</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #7B7F8B"># Warn really big diffs</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #97E1F1">warn</span><span style="color: #F6F6F4">(</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">We cannot handle the scale of this PR</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">) </span><span style="color: #F286C4">if</span><span style="color: #F6F6F4"> git.lines_of_code </span><span style="color: #F286C4">&gt;</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">300</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #7B7F8B"># Note when a pr cannot be manually merged, which goes away when you can</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #97E1F1">warn</span><span style="color: #F6F6F4">(</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">This PR cannot be merged yet.</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">, sticky</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">false</span><span style="color: #F6F6F4">) </span><span style="color: #F286C4">unless</span><span style="color: #F6F6F4"> github.pr_json[</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">mergeable</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">]</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4"> </span><span style="color: #F286C4">when</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">test</span><span style="color: #DEE492">&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #7B7F8B">### for SimpleCov ###</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  coverage_file </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">coverage/coverage.json</span><span style="color: #DEE492">&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  simplecov.report(coverage_file, sticky</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">false</span><span style="color: #F6F6F4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">  simplecov.individual_report(coverage_file, </span><span style="color: #97E1F1; font-style: italic">Dir</span><span style="color: #F6F6F4">.pwd)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">end</span></span></code></pre></div>



<p class="wp-block-paragraph"><strong>Step 9</strong>: Back to CircleCI -&gt; Click <a href="https://app.circleci.com/settings/organization/github/hinodelabo/overview?return-to=https%3A%2F%2Fapp.circleci.com%2Fpipelines%2Fgithub%2Fhinodelabo%2Fqlear-v2-bot"><strong>Organization Settings -&gt; Contexts -&gt; Create Context</strong></a></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="541" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.15.01-2-1024x541.png" alt="" class="wp-image-1929" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.15.01-2-1024x541.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.15.01-2-300x158.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.15.01-2-768x406.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.15.01-2-1536x811.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.15.01-2-380x201.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.15.01-2-800x423.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.15.01-2-1160x613.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.15.01-2.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>Step 10</strong>: Enter name <strong>Context</strong> and click <strong>Create Context</strong></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="480" height="337" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.21.17-1.png" alt="" class="wp-image-1930" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.21.17-1.png 480w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.21.17-1-300x211.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.21.17-1-200x140.png 200w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.21.17-1-380x267.png 380w" sizes="auto, (max-width: 480px) 100vw, 480px" /></figure>



<p class="wp-block-paragraph"><strong>Step 11</strong>: Click Context Name created and add environment for project such as <strong>RAILS_MASTER_KEY</strong>, <strong>RAILS_ENV</strong>, <strong>RACK_ENV</strong>, <strong>DANGER_GITHUB_API_TOKEN</strong></p>



<p class="wp-block-paragraph"><img loading="lazy" decoding="async" width="602" height="369" src="https://lh7-us.googleusercontent.com/17QyXLD3bPoW37cSOYqHPLsPm0uKHPu6OeuHKJdiNjW0BYHRYPnPjpcAqA5T76mSrD8TWG-LWkKGXCnG3C4I38vCi4Cd7omWGvVoAaEupr0jK01mlqi-yk3ejp44tmiIINx_DKnS1ZlCYgSS2hvmkA"></p>



<p class="wp-block-paragraph">Click Add Environment and enter value as below:</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh7-us.googleusercontent.com/VawQSbkEyRNPF0gTcuZpOMupCXkMWjkHYUkubeARhEFwjAtprXU7dO_uB1kJj_arFhyvmuBcOROKFznmQ20Z17xrc4TPQYJAtPGN9vP8u6IuuAJtv8jbnzBHktucj95hNV1ngdzhq6uqiyO7CVnMpA" alt=""/></figure>



<p class="wp-block-paragraph"><strong>Note:</strong></p>



<ul class="wp-block-list">
<li>RAILS_MASTER_KEY: Open file config/crendentials/test.key on project and copy it.</li>



<li>RAILS_ENV: test</li>



<li>RACK_ENV: test</li>
</ul>



<p class="wp-block-paragraph">After add 3 environments, it will displayed as below:</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh7-us.googleusercontent.com/WiT33geUhW0yOKFsk__sCQAGncXWsmc2gYABWVxVpEFs1loyoiC2nswh9C3YwTovzG9umpGJqqHC_uIf455XlXv5T8LRER2VQKr6JSDhRT4TeAmHii1cJrkZ2MrPnwm6FjBB_DzUdZC3i3QzuqpMsw" alt=""/></figure>



<p class="wp-block-paragraph"><strong>Step 12</strong>: Create <strong>DANGER_GITHUB_API_TOKEN</strong></p>



<ol class="wp-block-list">
<li>Access <a href="https://github.com/settings/tokens">https://github.com/settings/tokens</a> and click <strong>Generate new token</strong></li>
</ol>



<figure class="wp-block-image"><img decoding="async" src="https://lh7-us.googleusercontent.com/G8nn12MjFXdAlmZPbLyXC9j_FDpA4Mg1ES-R79AqjJo6rwp-QqaIWbWbwgWo678Jx2qUMSY8DqvkQehGEYDwLeR5eLddtBcirZmUMXvGYOSuMHqEi35NP7Da1p0TYW-dn0UBHUmod9FEVhM8qlCoAw" alt=""/></figure>



<ol class="wp-block-list" start="2">
<li>Write Note and Select Expiration, Scope. I choose Expiration 90 days and click repo</li>
</ol>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="776" height="388" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.43.20-1.png" alt="" class="wp-image-1934" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.43.20-1.png 776w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.43.20-1-300x150.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.43.20-1-768x384.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.43.20-1-380x190.png 380w" sizes="auto, (max-width: 776px) 100vw, 776px" /></figure>



<ol class="wp-block-list" start="3">
<li>Click Generate Token and Copy this.</li>
</ol>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="379" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.44.39-1.png" alt="" class="wp-image-1931" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.44.39-1.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.44.39-1-300x142.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.44.39-1-768x364.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-13.44.39-1-380x180.png 380w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<ol class="wp-block-list" start="4">
<li>Back to <strong>Context</strong> and Add <strong>DANGER_GITHUB_API_TOKEN</strong></li>
</ol>



<p class="wp-block-paragraph"><strong>Step 12</strong>: Push code and runnnnn</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="287" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-14.23.09-1-1024x287.png" alt="" class="wp-image-1933" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-14.23.09-1-1024x287.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-14.23.09-1-300x84.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-14.23.09-1-768x216.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-14.23.09-1-1536x431.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-14.23.09-1-380x107.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-14.23.09-1-800x225.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-14.23.09-1-1160x326.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-14.23.09-1.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="931" height="497" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-14.23.43.png" alt="" class="wp-image-1936" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-14.23.43.png 931w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-14.23.43-300x160.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-14.23.43-768x410.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-14.23.43-380x203.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-07-18-at-14.23.43-800x427.png 800w" sizes="auto, (max-width: 931px) 100vw, 931px" /></figure>
<p>The post <a href="https://blog.tomosia.com.vn/ror-huong-dan-setup-circleci-code-quality/">[ROR] Hướng dẫn setup CircleCI &#038; Code Quality</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/ror-huong-dan-setup-circleci-code-quality/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>Cài đặt MySQL trên Amazon Linux</title>
		<link>https://blog.tomosia.com.vn/cai-dat-mysql-tren-amazon-linux/</link>
					<comments>https://blog.tomosia.com.vn/cai-dat-mysql-tren-amazon-linux/#comments</comments>
		
		<dc:creator><![CDATA[Anh Le]]></dc:creator>
		<pubDate>Wed, 15 Nov 2023 18:46:52 +0000</pubDate>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[AWS]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=1901</guid>

					<description><![CDATA[<p>Giới thiệu Đối với các website không yêu cầu nhiều về quản lý CSDL như blog, các dự&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/cai-dat-mysql-tren-amazon-linux/">Cài đặt MySQL trên Amazon Linux</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h5 id="gioi-thieu" class="wp-block-heading">Giới thiệu</h5>



<p class="wp-block-paragraph">Đối với các website không yêu cầu nhiều về quản lý CSDL như blog, các dự án cần build môi trường Dev, Staging,&#8230; thì bạn có thể giản thiểu chi phí cho việc quản lý CSDL bằng cách cài đặt trực tiếp MySQL lên EC2.</p>



<h5 id="cac-buoc-thuc-hien" class="wp-block-heading">Các bước thực hiện</h5>



<p class="wp-block-paragraph">Step1: Thêm Mysql repository.</p>



<p class="wp-block-paragraph">Trước tiên, chúng ta cần thêm kho lưu trữ MySQL Yum vào danh sách kho lưu trữ của máy chủ Amazon Linux 2023. Thao tác này chỉ được thực hiện một lần và cung cấp tất cả các kho phiên bản gói MySQL.</p>



<p class="wp-block-paragraph">Sử dụng wget để tải về repository bằng command.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="/* For MySQL 5.7 */
sudo wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

/* For MySQL 8 */
sudo wget https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm " style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">/*</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">For</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">5.7</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE; font-style: italic">*</span><span style="color: #E7EE98">/</span></span>
<span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">wget</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">/*</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">For</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">8</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE; font-style: italic">*</span><span style="color: #E7EE98">/</span></span>
<span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">wget</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm</span><span style="color: #F6F6F4"> </span></span></code></pre></div>



<p class="wp-block-paragraph">Nhập y để confirm tải package.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="Dependencies Resolved

======================================================================================================================================================================================================
 Package                                               Arch                               Version                           Repository                                                           Size
======================================================================================================================================================================================================
Installing:
 mysql80-community-release                             noarch                             el7-5                             /mysql80-community-release-el7-5.noarch                             9.1 k

Transaction Summary
======================================================================================================================================================================================================
Install  1 Package

Total size: 9.1 k
Installed size: 9.1 k
Is this ok [y/d/N]: y" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">Dependencies</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Resolved</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">======================================================================================================================================================================================================</span></span>
<span class="line"><span style="color: #F6F6F4"> </span><span style="color: #62E884">Package</span><span style="color: #F6F6F4">                                               </span><span style="color: #E7EE98">Arch</span><span style="color: #F6F6F4">                               </span><span style="color: #E7EE98">Version</span><span style="color: #F6F6F4">                           </span><span style="color: #E7EE98">Repository</span><span style="color: #F6F6F4">                                                           </span><span style="color: #E7EE98">Size</span></span>
<span class="line"><span style="color: #F6F6F4">======================================================================================================================================================================================================</span></span>
<span class="line"><span style="color: #62E884">Installing:</span></span>
<span class="line"><span style="color: #F6F6F4"> </span><span style="color: #62E884">mysql80-community-release</span><span style="color: #F6F6F4">                             </span><span style="color: #E7EE98">noarch</span><span style="color: #F6F6F4">                             </span><span style="color: #E7EE98">el7-5</span><span style="color: #F6F6F4">                             </span><span style="color: #E7EE98">/mysql80-community-release-el7-5.noarch</span><span style="color: #F6F6F4">                             </span><span style="color: #BF9EEE">9.1</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">k</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Transaction</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Summary</span></span>
<span class="line"><span style="color: #F6F6F4">======================================================================================================================================================================================================</span></span>
<span class="line"><span style="color: #62E884">Install</span><span style="color: #F6F6F4">  </span><span style="color: #BF9EEE">1</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Package</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Total</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">size:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">9.1</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">k</span></span>
<span class="line"><span style="color: #62E884">Installed</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">size:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">9.1</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">k</span></span>
<span class="line"><span style="color: #62E884">Is</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">this</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ok</span><span style="color: #F6F6F4"> [y/d/N]: y</span></span></code></pre></div>



<p class="wp-block-paragraph">Kiểm tra repository đã tải thành công chưa với câu lệnh.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="sudo ls -lrt" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ls</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-lrt</span></span></code></pre></div>



<p class="wp-block-paragraph">Output:</p>



<p class="wp-block-paragraph"><em>[ec2-user@ip-172-31-32-xxx ~]$ sudo ls -lrt<br>total 12<br>-rw-r&#8211;r&#8211;. 1 root root 10534 Jul 25 2022 mysql80-community-release-el9-1.noarch.rpm</em></p>



<p class="wp-block-paragraph">Step 2: Cài đặt MySQL.</p>



<p class="wp-block-paragraph">For MySQL 5.7</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="/* For MySQL 5.7 */
sudo yum localinstall mysql57-community-release-el7-11.noarch.rpm" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">/*</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">For</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">5.7</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE; font-style: italic">*</span><span style="color: #E7EE98">/</span></span>
<span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">yum</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">localinstall</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysql57-community-release-el7-11.noarch.rpm</span></span></code></pre></div>



<p class="wp-block-paragraph">Ở bước này nếu bạn gặp lỗi tương tự như bên dưới thì tiếp tục chạy 2 lệnh tiếp theo để fix nhé.</p>



<p class="wp-block-paragraph"><strong>Failing package is: mysql-community-client-5.7.39-1.el7.x86_64<br>GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql</strong></p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

sudo yum -y install mysql-community-server" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">rpm</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--import</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">https://repo.mysql.com/RPM-GPG-KEY-mysql-2022</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">yum</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-y</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">install</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysql-community-server</span></span></code></pre></div>



<p class="wp-block-paragraph">For MySQL 8.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="sudo dnf install mysql80-community-release-el9-1.noarch.rpm
dnf repolist enabled | grep &quot;mysql.*-community.*&quot;
sudo dnf install mysql-community-server" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">dnf</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">install</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysql80-community-release-el9-1.noarch.rpm</span></span>
<span class="line"><span style="color: #62E884">dnf</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">repolist</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">enabled</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">|</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">grep</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">mysql.*-community.*</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">dnf</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">install</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysql-community-server</span></span></code></pre></div>



<p class="wp-block-paragraph">Step 3: Sau khi hoàn tất các câu lệnh cài đặt, ta thực hiện start MySQL.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="sudo systemctl start mysqld.service" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">systemctl</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">start</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysqld.service</span></span></code></pre></div>



<p class="wp-block-paragraph">Step 4: Kiểm tra trạng thái của Mysql hiện tại.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="sudo systemctl status mysqld.service" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">systemctl</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">status</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysqld.service</span></span></code></pre></div>



<p class="wp-block-paragraph">Nếu thành công bạn sẽ thấy thông báo MySQL đã running <em>Active: active (running)</em> như bên dưới.</p>



<p class="wp-block-paragraph">Dec 01 19:02:20 centos-512mb-sfo2-02 systemd[1]: Started MySQL Server.</p>



<h5 id="thiet-lap-cau-hinh-cho-mysql" class="wp-block-heading">Thiết lập cấu hình cho Mysql</h5>



<p class="wp-block-paragraph">Đổi mật khẩu cho người dùng root<br>Như bạn đã biết, từ Mysql 8.0 thì việc sử dụng đăng nhập không dùng mật khẩu với người dùng root đã bị loại bỏ. Vậy để tìm mật khẩu cho người dùng root khi đăng nhập lần đầu ta sẽ tìm trong file log của mysql. Mật khẩu tạm thời được tìm thấy khi thực hiện câu lệnh:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="sudo grep 'temporary password' /var/log/mysqld.log" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">grep</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">temporary password</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">/var/log/mysqld.log</span></span></code></pre></div>



<p class="wp-block-paragraph">[ec2-user@ip-172-31-32-xxx ~]$ sudo grep &#8216;temporary password&#8217; /var/log/mysqld.log<br>2023-07-28T09:06:43.641665Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: D6%=yjkDGnp8</p>



<p class="wp-block-paragraph">Tiếp theo ta thực hiện đăng nhập vào MySQL và nhập password tạm thời của người dùng root trong câu lệnh bên dưới: (Mật khẩu root: D6%=yjkDGnp8)</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="sudo mysql_secure_installation -p" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysql_secure_installation</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-p</span></span></code></pre></div>



<p class="wp-block-paragraph">Nhập mật khẩu mới cho người dùng root và nhập y cuối mỗi câu để loại bỏ các user test.</p>



<p class="wp-block-paragraph">Lưu ý khi đặt mật khẩu cần tuân theo quy tắt sau:<br>+ Chứa ít nhất 1 ký tự in hoa<br>+ Chứa ít nhất 1 ký tự thường<br>+ Chứa ít nhất 1 số<br>+ Chứa ít nhất 1 ký tự đặc biệt<br>+ Tổng số ký tự phải lớn hơn 8</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="Securing the MySQL server deployment.


The existing password for the user account root has expired. Please set a new password.

New password: &lt;MẬT KHẨU MỚI&gt;

Re-enter new password: &lt;NHẬP LẠI MẬT KHẨU&gt;
The 'validate_password' component is installed on the server.
The subsequent steps will run with the existing configuration
of the component.
Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) :

 ... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">Securing</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">server</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">deployment.</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">The</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">existing</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">user</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">account</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">root</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">has</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">expired.</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Please</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">set</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">a</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">new</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">New</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">&lt;</span><span style="color: #E7EE98">MẬT</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">KHẨU</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MỚ</span><span style="color: #F6F6F4">I</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Re-enter</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">new</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">&lt;</span><span style="color: #E7EE98">NHẬP</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">LẠI</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MẬT</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">KHẨ</span><span style="color: #F6F6F4">U</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"><span style="color: #62E884">The</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">validate_password</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">component</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">is</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">installed</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">on</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">server.</span></span>
<span class="line"><span style="color: #62E884">The</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">subsequent</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">steps</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">will</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">run</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">with</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">existing</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">configuration</span></span>
<span class="line"><span style="color: #62E884">of</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">component.</span></span>
<span class="line"><span style="color: #62E884">Using</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">existing</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">root.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Estimated</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">strength</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">of</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">100</span></span>
<span class="line"><span style="color: #62E884">Change</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">root</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">?</span><span style="color: #F6F6F4"> ((Press </span><span style="color: #E7EE98">y</span><span style="color: #F286C4">|</span><span style="color: #62E884">Y</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Yes,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">any</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">other</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">No</span><span style="color: #F6F6F4">) </span><span style="color: #97E1F1">:</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4"> </span><span style="color: #97E1F1">...</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">skipping.</span></span>
<span class="line"><span style="color: #62E884">By</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">default,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">a</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">installation</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">has</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">an</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">anonymous</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">user,</span></span>
<span class="line"><span style="color: #62E884">allowing</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">anyone</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">to</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">log</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">into</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">without</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">having</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">to</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">have</span></span>
<span class="line"><span style="color: #62E884">a</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">user</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">account</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">created</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">them.</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">This</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">is</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">intended</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">only</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span></span>
<span class="line"><span style="color: #62E884">testing,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">and</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">to</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">make</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">installation</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">go</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">a</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">bit</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">smoother.</span></span>
<span class="line"><span style="color: #62E884">You</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">should</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">remove</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">them</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">before</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">moving</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">into</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">a</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">production</span></span>
<span class="line"><span style="color: #62E884">environment.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Remove</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">anonymous</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">users?</span><span style="color: #F6F6F4"> (Press </span><span style="color: #E7EE98">y</span><span style="color: #F286C4">|</span><span style="color: #62E884">Y</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Yes,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">any</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">other</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">No</span><span style="color: #F6F6F4">) </span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> y</span></span>
<span class="line"><span style="color: #62E884">Success.</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Normally,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">root</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">should</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">only</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">be</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">allowed</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">to</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">connect</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">from</span></span>
<span class="line"><span style="color: #62E884">&#39;localhost&#39;</span><span style="color: #97E1F1">.</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">This</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ensures</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">that</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">someone</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">cannot</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">guess</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">at</span></span>
<span class="line"><span style="color: #62E884">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">root</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">from</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">network.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Disallow</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">root</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">login</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">remotely?</span><span style="color: #F6F6F4"> (Press </span><span style="color: #E7EE98">y</span><span style="color: #F286C4">|</span><span style="color: #62E884">Y</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Yes,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">any</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">other</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">No</span><span style="color: #F6F6F4">) </span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> y</span></span>
<span class="line"><span style="color: #62E884">Success.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">By</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">default,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">comes</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">with</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">a</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">database</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">named</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">test</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">that</span></span>
<span class="line"><span style="color: #62E884">anyone</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">can</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">access.</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">This</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">is</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">also</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">intended</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">only</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">testing,</span></span>
<span class="line"><span style="color: #62E884">and</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">should</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">be</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">removed</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">before</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">moving</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">into</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">a</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">production</span></span>
<span class="line"><span style="color: #62E884">environment.</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Remove</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">test</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">database</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">and</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">access</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">to</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">it?</span><span style="color: #F6F6F4"> (Press </span><span style="color: #E7EE98">y</span><span style="color: #F286C4">|</span><span style="color: #62E884">Y</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Yes,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">any</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">other</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">No</span><span style="color: #F6F6F4">) </span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> y</span></span>
<span class="line"><span style="color: #F6F6F4"> </span><span style="color: #62E884">-</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Dropping</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">test</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">database...</span></span>
<span class="line"><span style="color: #62E884">Success.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4"> </span><span style="color: #62E884">-</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Removing</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">privileges</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">on</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">test</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">database...</span></span>
<span class="line"><span style="color: #62E884">Success.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Reloading</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">privilege</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">tables</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">will</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ensure</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">that</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">all</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">changes</span></span>
<span class="line"><span style="color: #62E884">made</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">so</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">far</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">will</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">take</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">effect</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">immediately.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Reload</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">privilege</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">tables</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">now?</span><span style="color: #F6F6F4"> (Press </span><span style="color: #E7EE98">y</span><span style="color: #F286C4">|</span><span style="color: #62E884">Y</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Yes,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">any</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">other</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">No</span><span style="color: #F6F6F4">) </span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> y</span></span>
<span class="line"><span style="color: #62E884">Success.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">All</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">done!</span></span></code></pre></div>



<p class="wp-block-paragraph">Sau khi hoàn tất bước đổi mật khẩu ở trên, chúng ta có thể thực hiện đăng nhập lại với mật khẩu vừa đổi.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="mysql -uroot -pPass_xxxxx" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">mysql</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-uroot</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-pPass_xxxxx</span></span></code></pre></div>



<h5 id="tao-db-va-nguoi-dung-cho-db-cua-ung-dung-web" class="wp-block-heading">Tạo DB và người dùng cho DB của ứng dụng web</h5>



<p class="wp-block-paragraph">Để tạo một database mới.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="create database db_new;" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">create</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">database</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">db_new</span><span style="color: #F6F6F4">;</span></span></code></pre></div>



<p class="wp-block-paragraph">Bước tiếp theo chúng ta sẽ thực hiện tạo một user cho ứng dụng web.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="CREATE USER 'user_db'@'localhost' IDENTIFIED BY 'Pass_xxxxx';" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">CREATE</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">USER</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">user_db</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">@</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">localhost</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">IDENTIFIED</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">BY</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">Pass_xxxxx</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">;</span></span></code></pre></div>



<p class="wp-block-paragraph">Thêm full quyền quản lý DB cho user vừa tạo ở trên</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="GRANT ALL PRIVILEGES ON db_new.* TO 'user_db'@'localhost';
FLUSH PRIVILEGES;
exit;" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">GRANT</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ALL</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">PRIVILEGES</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ON</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">db_new.</span><span style="color: #BF9EEE; font-style: italic">*</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">TO</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">user_db</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">@</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">localhost</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #62E884">FLUSH</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">PRIVILEGES</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #97E1F1">exit</span><span style="color: #F6F6F4">;</span></span></code></pre></div>



<p class="wp-block-paragraph">Để kiểm tra bước tạo ở trên đã chuẩn chưa thì chúng ta thực hiện đăng nhập lại với user và password vừa tạo:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="mysql -uuser_db -ppass_xxxx" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">mysql</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-uuser_db</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-ppass_xxxx</span></span></code></pre></div>



<p class="wp-block-paragraph">Kiểm tra trạng thái của MySQL.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="Redirecting to /bin/systemctl status mysqld.service
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; preset: d&gt;
Active: active (running) since Mon 2023-07-31 10:10:56 UTC; 2 weeks 2 days&gt;
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Main PID: 250921 (mysqld)
Status: &quot;Server is operational&quot;
Tasks: 46 (limit: 2322)
Memory: 575.6M
CPU: 2h 19min 306ms
CGroup: /system.slice/mysqld.service
└─250921 /usr/sbin/mysqld" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">Redirecting</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">to</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">/bin/systemctl</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">status</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysqld.service</span></span>
<span class="line"><span style="color: #62E884">●</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysqld.service</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">-</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Server</span></span>
<span class="line"><span style="color: #62E884">Loaded:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">loaded</span><span style="color: #F6F6F4"> (/usr/lib/systemd/system/mysqld.service; </span><span style="color: #62E884">enabled</span><span style="color: #F6F6F4">; </span><span style="color: #62E884">preset:</span><span style="color: #F6F6F4"> d</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"><span style="color: #62E884">Active:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">active</span><span style="color: #F6F6F4"> (running) since Mon 2023-07-31 10:10:56 UTC; </span><span style="color: #62E884">2</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">weeks</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">2</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">day</span><span style="color: #F6F6F4">s</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"><span style="color: #62E884">Docs:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">man:mysqld</span><span style="color: #F6F6F4">(</span><span style="color: #62E884">8</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #62E884">http://dev.mysql.com/doc/refman/en/using-systemd.html</span></span>
<span class="line"><span style="color: #62E884">Main</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">PID:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">250921</span><span style="color: #F6F6F4"> (mysqld)</span></span>
<span class="line"><span style="color: #62E884">Status:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">Server is operational</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #62E884">Tasks:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">46</span><span style="color: #F6F6F4"> (limit: </span><span style="color: #BF9EEE">2322</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #62E884">Memory:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">575.6</span><span style="color: #E7EE98">M</span></span>
<span class="line"><span style="color: #62E884">CPU:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">2</span><span style="color: #E7EE98">h</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">19</span><span style="color: #E7EE98">min</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">306</span><span style="color: #E7EE98">ms</span></span>
<span class="line"><span style="color: #62E884">CGroup:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">/system.slice/mysqld.service</span></span>
<span class="line"><span style="color: #62E884">└─250921</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">/usr/sbin/mysqld</span></span></code></pre></div>



<p class="wp-block-paragraph">Đến bước này là chúng ta đã hoàn thành việc cài đặt Mysql server trên Amazon Linux 2023. Ngoài ra để thực hiện import sql có sẵn vào DB vừa tạo thì chúng ta có thể cài đặt PhpMyadmin hoặc sử dụng command import của mysql.</p>



<h5 id="import-va-export-mysql" class="wp-block-heading">Import và Export Mysql</h5>



<p class="wp-block-paragraph">Để Export Mysql, ở đây ta sẽ sử dụng mysqldump, thực hiện câu lệnh sau tại terminal local:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="mysqldump -u user_db -pPass_xxxxx db_export &gt; ./db_backup.sql" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">mysqldump</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-u</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">user_db</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-pPass_xxxxx</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">db_export</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">&gt;</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">./db_backup.sql</span></span></code></pre></div>



<p class="wp-block-paragraph">Lưu ý để sử dụng được DB và import vào DB mới bạn cần xóa warning của mysqldump trong file db_backup.sql vừa export ra. Tìm dòng sau trong file và xóa:</p>



<p class="wp-block-paragraph"><em>mysqldump: [Warning] Using a password on the command line interface can be insecure.</em></p>



<p class="wp-block-paragraph">Để Import Mysql vào db mới ta thực hiện lệnh:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Bash</span><span role="button" tabindex="0" data-code="mysql -u username -p db_export &lt; db_backup.sql" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">mysql</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-u</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">username</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-p</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">db_export</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">&lt;</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">db_backup.sql</span></span></code></pre></div>



<h5 id="tong-ket" class="wp-block-heading">Tổng kết</h5>



<p class="wp-block-paragraph">Trên đây là toàn bộ quá trình cài đặt Mysql trên Amazon Linux 2023. Các bước hướng dẫn trên được tóm gọn dành cho người có kinh nghiệm khi cài đặt server. Nếu bạn có vấn đề gì trong quá trình cài đặt hãy để lại comment hoặc inbox mình sẽ hướng dẫn cho nhé.</p>



<p class="wp-block-paragraph">Reference:</p>



<p class="wp-block-paragraph"><a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2023.html">https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2023.html</a></p>
<p>The post <a href="https://blog.tomosia.com.vn/cai-dat-mysql-tren-amazon-linux/">Cài đặt MySQL trên Amazon Linux</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/cai-dat-mysql-tren-amazon-linux/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>Localstack, giả lập môi trường AWS.</title>
		<link>https://blog.tomosia.com.vn/localstack-gia-lap-moi-truong-aws/</link>
					<comments>https://blog.tomosia.com.vn/localstack-gia-lap-moi-truong-aws/#comments</comments>
		
		<dc:creator><![CDATA[Le Van Ninh]]></dc:creator>
		<pubDate>Wed, 15 Nov 2023 09:42:02 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Aws]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=1846</guid>

					<description><![CDATA[<p>Mục đích sử dụng: Localstack mô phỏng lại môi trường AWS trên máy local. Nó giúp phát triển&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/localstack-gia-lap-moi-truong-aws/">Localstack, giả lập môi trường AWS.</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 id="muc-dich-su-dung" class="wp-block-heading">Mục đích sử dụng:</h2>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p class="wp-block-paragraph"><code>Localstack</code> mô phỏng lại môi trường AWS trên máy local.</p>



<p class="wp-block-paragraph">Nó giúp phát triển và kiểm thử các giải pháp như microservices hoặc functions và sử dụng các dịch vụ có trong AWS.</p>



<p class="wp-block-paragraph">Các dịch vụ AWS trên Localstack:</p>



<pre class="wp-block-verse">API Gateway,
Kinesis, 
DynamoDB, 
DynamoDB Streams, 
Elasticsearch, 
S3, 
Firehose, 
Lambda, 
SNS, 
SQS, 
Redshift, 
ES (Elasticsearch Service), 
SES, 
Route53, 
CloudFormation, 
CloudWatch, 
SSM, 
SecretsManager</pre>
</div></div>



<h2 id="cai-dat-va-su-dung" class="wp-block-heading">Cài đặt và sử dụng:</h2>



<p class="wp-block-paragraph">Cài đặt localstack:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">YAML</span><span role="button" tabindex="0" data-code="# docker-compose.yml

version: &quot;3.2&quot;
services:
  localstack:
    image: localstack/localstack:latest
    container_name: localstack_demo
    ports:
      # - &quot;127.0.0.1:4566:4566&quot; # LocalStack Gateway
      - &quot;127.0.0.1:4510-4559:4510-4559&quot; # external services port range
      - &quot;0.0.0.0:4566:4566&quot;
    environment:
      - SERVICES=s3
      - DEBUG=1
      - DATA_DIR=/tmp/localstack/data
    volumes:
      - &quot;./.localstack:/var/lib/localstack&quot;
      - &quot;/var/run/docker.sock:/var/run/docker.sock&quot;" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #7B7F8B"># docker-compose.yml</span></span>
<span class="line"></span>
<span class="line"><span style="color: #97E1F1">version</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">3.2</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #97E1F1">services</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #97E1F1">localstack</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">image</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">localstack/localstack:latest</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">container_name</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">localstack_demo</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">ports</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #7B7F8B"># - &quot;127.0.0.1:4566:4566&quot; # LocalStack Gateway</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">127.0.0.1:4510-4559:4510-4559</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4"> </span><span style="color: #7B7F8B"># external services port range</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">0.0.0.0:4566:4566</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">environment</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">SERVICES=s3</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">DEBUG=1</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">DATA_DIR=/tmp/localstack/data</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">volumes</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">./.localstack:/var/lib/localstack</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">/var/run/docker.sock:/var/run/docker.sock</span><span style="color: #DEE492">&quot;</span></span></code></pre></div>



<p class="wp-block-paragraph">Start localstack:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Zsh</span><span role="button" tabindex="0" data-code="docker-compose up -d" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">docker-compose</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">up</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-d</span></span></code></pre></div>



<p class="wp-block-paragraph">Tạo profile cho Localstack:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Zsh</span><span role="button" tabindex="0" data-code="aws configure --profile localstack
 
AWS Access Key ID [****************demo]: dummy
AWS Secret Access Key [****************demo]: dummy
Default region name [ap-northeast-1]: ap-northeast-1
Default output format [json]: json" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">configure</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--profile</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">localstack</span></span>
<span class="line"><span style="color: #F6F6F4"> </span></span>
<span class="line"><span style="color: #62E884">AWS</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Access</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ID</span><span style="color: #F6F6F4"> [****************demo]: dummy</span></span>
<span class="line"><span style="color: #62E884">AWS</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Secret</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Access</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Key</span><span style="color: #F6F6F4"> [****************demo]: dummy</span></span>
<span class="line"><span style="color: #62E884">Default</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">region</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">name</span><span style="color: #F6F6F4"> [ap-northeast-1]: ap-northeast-1</span></span>
<span class="line"><span style="color: #62E884">Default</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">output</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">format</span><span style="color: #F6F6F4"> [json]: json</span></span></code></pre></div>
</div></div>



<p class="wp-block-paragraph">Or</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Zsh</span><span role="button" tabindex="0" data-code="vi ~/.aws/config" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">vi</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">~/.aws/config</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">VimL</span><span role="button" tabindex="0" data-code="[profile localstack]
output = json
region = ap-northeast-1" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">[profile localstack]</span></span>
<span class="line"><span style="color: #F6F6F4">output </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> json</span></span>
<span class="line"><span style="color: #F6F6F4">region </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> ap-northeast-</span><span style="color: #BF9EEE">1</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Zsh</span><span role="button" tabindex="0" data-code="vi ~/.aws/credentials" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">vi</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">~/.aws/credentials</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">VimL</span><span role="button" tabindex="0" data-code="[localstack]
aws_access_key_id = dummy
aws_secret_access_key = dummy" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">[localstack]</span></span>
<span class="line"><span style="color: #F6F6F4">aws_access_key_id </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> dummy</span></span>
<span class="line"><span style="color: #F6F6F4">aws_secret_access_key </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> dummy</span></span></code></pre></div>



<h4 id="tao-s3-trong-localstack" class="wp-block-heading">Tạo S3 trong Localstack:</h4>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Zsh</span><span role="button" tabindex="0" data-code="aws --endpoint-url=http://localhost:4566 --profile localstack s3api create-bucket --bucket test-bucket --create-bucket-configuration LocationConstraint=ap-northeast-1

# Kết quả:
{
    &quot;Location&quot;: &quot;http://test-bucket.s3.localhost.localstack.cloud:4566/&quot;
}" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--endpoint-url=http://localhost:4566</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--profile</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">localstack</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3api</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">create-bucket</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--bucket</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">test-bucket</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--create-bucket-configuration</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">LocationConstraint=ap-northeast-1</span></span>
<span class="line"></span>
<span class="line"><span style="color: #7B7F8B"># Kết quả:</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #62E884">&quot;Location&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">http://test-bucket.s3.localhost.localstack.cloud:4566/</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Zsh</span><span role="button" tabindex="0" data-code="aws s3 ls --endpoint-url=http://localhost:4566 --profile localstack

# Kết quả:
2023-11-15 10:24:40 test-bucket" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ls</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--endpoint-url=http://localhost:4566</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--profile</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">localstack</span></span>
<span class="line"></span>
<span class="line"><span style="color: #7B7F8B"># Kết quả:</span></span>
<span class="line"><span style="color: #62E884">2023-11-15</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">10</span><span style="color: #E7EE98">:24:40</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">test-bucket</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">YAML</span><span role="button" tabindex="0" data-code="# .env

# Cả 2 endpoint đều hoạt động với Localstack ở local.
#S3_ENDPOINT='http://localhost:4566'
S3_ENDPOINT='http://test-bucket.s3.localhost.localstack.cloud:4566/'
S3_AWS_ACCESS_KEY_ID='dummy'
S3_AWS_SECRET_KEY='dummy'
S3_AWS_BUCKET_NAME='test-bucket'" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #7B7F8B"># .env</span></span>
<span class="line"></span>
<span class="line"><span style="color: #7B7F8B"># Cả 2 endpoint đều hoạt động với Localstack ở local.</span></span>
<span class="line"><span style="color: #7B7F8B">#S3_ENDPOINT=&#39;http://localhost:4566&#39;</span></span>
<span class="line"><span style="color: #E7EE98">S3_ENDPOINT=&#39;http://test-bucket.s3.localhost.localstack.cloud:4566/&#39;</span></span>
<span class="line"><span style="color: #E7EE98">S3_AWS_ACCESS_KEY_ID=&#39;dummy&#39;</span></span>
<span class="line"><span style="color: #E7EE98">S3_AWS_SECRET_KEY=&#39;dummy&#39;</span></span>
<span class="line"><span style="color: #E7EE98">S3_AWS_BUCKET_NAME=&#39;test-bucket&#39;</span></span></code></pre></div>



<h4 id="tao-dynamodb-trong-localstack" class="wp-block-heading">Tạo Dynamodb trong Localstack:</h4>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">YAML</span><span role="button" tabindex="0" data-code="version: &quot;3.2&quot;
services:
  localstack:
    image: localstack/localstack:latest
    container_name: localstack_demo
    ports:
      # - &quot;127.0.0.1:4566:4566&quot; # LocalStack Gateway
      - &quot;127.0.0.1:4510-4559:4510-4559&quot; # external services port range
      - &quot;0.0.0.0:4566:4566&quot;
    environment:
      - SERVICES=dynamodb
      - DEBUG=1
      - DATA_DIR=/tmp/localstack/data
    volumes:
      - &quot;./.localstack:/var/lib/localstack&quot;
      - &quot;/var/run/docker.sock:/var/run/docker.sock&quot;" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #97E1F1">version</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">3.2</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #97E1F1">services</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #97E1F1">localstack</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">image</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">localstack/localstack:latest</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">container_name</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">localstack_demo</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">ports</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #7B7F8B"># - &quot;127.0.0.1:4566:4566&quot; # LocalStack Gateway</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">127.0.0.1:4510-4559:4510-4559</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4"> </span><span style="color: #7B7F8B"># external services port range</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">0.0.0.0:4566:4566</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">environment</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">SERVICES=dynamodb</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">DEBUG=1</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">DATA_DIR=/tmp/localstack/data</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">volumes</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">./.localstack:/var/lib/localstack</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">/var/run/docker.sock:/var/run/docker.sock</span><span style="color: #DEE492">&quot;</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Zsh</span><span role="button" tabindex="0" data-code="aws dynamodb create-table \
    --table-name test \
    --key-schema AttributeName=id,KeyType=HASH \
    --attribute-definitions AttributeName=id,AttributeType=S \
    --billing-mode PAY_PER_REQUEST \
    --region ap-northeast-1 \
    --endpoint-url=http://localhost:4566 \
    --profile localstack

# Kết quả:
{
    &quot;TableDescription&quot;: {
        &quot;AttributeDefinitions&quot;: [
            {
                &quot;AttributeName&quot;: &quot;id&quot;,
                &quot;AttributeType&quot;: &quot;S&quot;
            }
        ],
        &quot;TableName&quot;: &quot;test&quot;,
        &quot;KeySchema&quot;: [
            {
                &quot;AttributeName&quot;: &quot;id&quot;,
                &quot;KeyType&quot;: &quot;HASH&quot;
            }
        ],
        &quot;TableStatus&quot;: &quot;ACTIVE&quot;,
        &quot;CreationDateTime&quot;: &quot;2023-11-15T11:29:05.597000+07:00&quot;,
        &quot;ProvisionedThroughput&quot;: {
            &quot;LastIncreaseDateTime&quot;: &quot;1970-01-01T07:00:00+07:00&quot;,
            &quot;LastDecreaseDateTime&quot;: &quot;1970-01-01T07:00:00+07:00&quot;,
            &quot;NumberOfDecreasesToday&quot;: 0,
            &quot;ReadCapacityUnits&quot;: 0,
            &quot;WriteCapacityUnits&quot;: 0
        },
        &quot;TableSizeBytes&quot;: 0,
        &quot;ItemCount&quot;: 0,
        &quot;TableArn&quot;: &quot;arn:aws:dynamodb:ap-northeast-1:000000000000:table/test&quot;,
        &quot;TableId&quot;: &quot;fb25d41f-0563-4be9-8b21-75bc3b7006b9&quot;,
        &quot;BillingModeSummary&quot;: {
            &quot;BillingMode&quot;: &quot;PAY_PER_REQUEST&quot;,
            &quot;LastUpdateToPayPerRequestDateTime&quot;: &quot;2023-11-15T11:29:05.597000+07:00&quot;
        }
    }
}" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">dynamodb</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">create-table</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">\</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #BF9EEE">--table-name</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">test</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">\</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #BF9EEE">--key-schema</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">AttributeName=id,KeyType=HASH</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">\</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #BF9EEE">--attribute-definitions</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">AttributeName=id,AttributeType=S</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">\</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #BF9EEE">--billing-mode</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">PAY_PER_REQUEST</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">\</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #BF9EEE">--region</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ap-northeast-1</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">\</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #BF9EEE">--endpoint-url=http://localhost:4566</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">\</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #BF9EEE">--profile</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">localstack</span></span>
<span class="line"></span>
<span class="line"><span style="color: #7B7F8B"># Kết quả:</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #62E884">&quot;TableDescription&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">{</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">&quot;AttributeDefinitions&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> [</span></span>
<span class="line"><span style="color: #F6F6F4">            {</span></span>
<span class="line"><span style="color: #F6F6F4">                </span><span style="color: #62E884">&quot;AttributeName&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">id</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">                </span><span style="color: #62E884">&quot;AttributeType&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">S</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #F6F6F4">            }</span></span>
<span class="line"><span style="color: #F6F6F4">        ],</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">&quot;TableName&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">test</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">&quot;KeySchema&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> [</span></span>
<span class="line"><span style="color: #F6F6F4">            {</span></span>
<span class="line"><span style="color: #F6F6F4">                </span><span style="color: #62E884">&quot;AttributeName&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">id</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">                </span><span style="color: #62E884">&quot;KeyType&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">HASH</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #F6F6F4">            }</span></span>
<span class="line"><span style="color: #F6F6F4">        ],</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">&quot;TableStatus&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">ACTIVE</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">&quot;CreationDateTime&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">2023-11-15T11:29:05.597000+07:00</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">&quot;ProvisionedThroughput&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">{</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #62E884">&quot;LastIncreaseDateTime&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">1970-01-01T07:00:00+07:00</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #62E884">&quot;LastDecreaseDateTime&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">1970-01-01T07:00:00+07:00</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #62E884">&quot;NumberOfDecreasesToday&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">0</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #62E884">&quot;ReadCapacityUnits&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">0</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #62E884">&quot;WriteCapacityUnits&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">0</span></span>
<span class="line"><span style="color: #F6F6F4">        },</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">&quot;TableSizeBytes&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">0</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">&quot;ItemCount&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">0</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">&quot;TableArn&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">arn:aws:dynamodb:ap-northeast-1:000000000000:table/test</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">&quot;TableId&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">fb25d41f-0563-4be9-8b21-75bc3b7006b9</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">&quot;BillingModeSummary&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">{</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #62E884">&quot;BillingMode&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">PAY_PER_REQUEST</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #62E884">&quot;LastUpdateToPayPerRequestDateTime&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">2023-11-15T11:29:05.597000+07:00</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #F6F6F4">        }</span></span>
<span class="line"><span style="color: #F6F6F4">    }</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span></code></pre></div>



<pre class="wp-block-verse">Bạn muốn sử dụng dịch vụ nào của AWS thì thêm dịch vụ đấy vào SERVICES trong file docker-compose.yml.</pre>



<p class="wp-block-paragraph">Tài liệu tham khảo: <a href="https://docs.localstack.cloud/">https://docs.localstack.cloud/</a></p>
<p>The post <a href="https://blog.tomosia.com.vn/localstack-gia-lap-moi-truong-aws/">Localstack, giả lập môi trường AWS.</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/localstack-gia-lap-moi-truong-aws/feed/</wfw:commentRss>
			<slash:comments>12</slash:comments>
		
		
			</item>
		<item>
		<title>Các bước triển khai trang web tĩnh bằng AWS S3</title>
		<link>https://blog.tomosia.com.vn/cac-buoc-trien-khai-trang-web-tinh-bang-aws-s3/</link>
					<comments>https://blog.tomosia.com.vn/cac-buoc-trien-khai-trang-web-tinh-bang-aws-s3/#comments</comments>
		
		<dc:creator><![CDATA[Thuc Phan]]></dc:creator>
		<pubDate>Wed, 08 Nov 2023 09:19:24 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=1750</guid>

					<description><![CDATA[<p>Triển khai trang web tĩnh (static web page) bằng Amazon Web Services (AWS) S3 là một cách hiệu&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/cac-buoc-trien-khai-trang-web-tinh-bang-aws-s3/">Các bước triển khai trang web tĩnh bằng AWS S3</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Triển khai trang web tĩnh (static web page) bằng Amazon Web Services (AWS) S3 là một cách hiệu quả và tiết kiệm chi phí để đưa trang web của bạn lên internet. Bài viết này sẽ hướng dẫn bạn từng bước cách triển khai trang web tĩnh bằng AWS S3</p>



<h3 id="buoc-1-chuan-bi-noi-dung-trang-web" class="wp-block-heading">Bước 1: Chuẩn bị nội dung trang web</h3>



<p class="wp-block-paragraph">Trước tiên, bạn cần chuẩn bị nội dung cho trang web tĩnh của mình. Đây có thể là các tệp HTML, CSS, JavaScript, hình ảnh và bất kỳ tài liệu tĩnh nào khác bạn muốn hiển thị trên trang web của mình</p>



<p class="wp-block-paragraph">Static website template source code: <a href="https://github.com/thuc-pt/fe-zing-mp3">https://github.com/thuc-pt/fe-zing-mp3</a></p>



<h3 id="buoc-2-tao-mot-s3-bucket" class="wp-block-heading">Bước 2: Tạo một S3 bucket</h3>



<ul class="wp-block-list">
<li>Đăng nhập vào AWS Management Console</li>
</ul>



<ul class="wp-block-list">
<li>Chuyển đến dịch vụ <code>"S3"</code> bằng cách tìm kiếm trong thanh tìm kiếm hoặc nhấp vào nó trong danh sách các dịch vụ</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="627" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.44.20-PM-1024x627.png" alt="" class="wp-image-1751" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.44.20-PM-1024x627.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.44.20-PM-300x184.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.44.20-PM-768x470.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.44.20-PM-1536x940.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.44.20-PM-2048x1253.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.44.20-PM-380x233.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.44.20-PM-800x490.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.44.20-PM-1160x710.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.44.20-PM.png 3200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>Click nút <code>"Create bucket"</code> để tạo mới một bucket</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="627" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.45.40-PM-1024x627.png" alt="" class="wp-image-1752" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.45.40-PM-1024x627.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.45.40-PM-300x184.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.45.40-PM-768x471.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.45.40-PM-1536x941.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.45.40-PM-2048x1255.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.45.40-PM-380x233.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.45.40-PM-800x490.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.45.40-PM-1160x711.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.45.40-PM.png 3196w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>AWS S3 quy định <code><strong>bucket name</strong></code> là duy nhất trên toàn cầu. Nên đặt tên bucket dạng <code><strong>your-domain-name.com</strong></code></li>
</ul>



<ul class="wp-block-list">
<li>Chọn khu vực AWS (Region) mà bạn muốn lưu trữ bucket</li>
</ul>



<ul class="wp-block-list">
<li>Bỏ qua các cài đặt còn lại (hoặc tuỳ chỉnh theo nhu cầu của bạn) và nhấp vào nút <code>"Create bucket"</code> ở cuối trang để tạo bucket</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="628" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.56.50-PM-1024x628.png" alt="" class="wp-image-1753" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.56.50-PM-1024x628.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.56.50-PM-300x184.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.56.50-PM-768x471.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.56.50-PM-1536x942.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.56.50-PM-2048x1256.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.56.50-PM-380x233.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.56.50-PM-800x491.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.56.50-PM-1160x711.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.56.50-PM.png 3200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 id="buoc-3-upload-noi-dung-trang-web" class="wp-block-heading">Bước 3: Upload nội dung trang web</h3>



<ul class="wp-block-list">
<li>Chọn bucket bạn đã tạo trong danh sách S3 buckets</li>
</ul>



<ul class="wp-block-list">
<li>Nhấp vào nút <code>"Upload"</code> và sau đó chọn files bạn muốn tải lên</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="629" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.59.14-PM-1024x629.png" alt="" class="wp-image-1754" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.59.14-PM-1024x629.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.59.14-PM-300x184.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.59.14-PM-768x472.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.59.14-PM-1536x943.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.59.14-PM-2048x1258.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.59.14-PM-380x233.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.59.14-PM-800x491.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.59.14-PM-1160x712.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.59.14-PM.png 3198w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>Sau khi bạn tải lên nội dung của trang web, hãy đảm bảo rằng tất cả các tệp và thư mục đều có quyền truy cập public để mọi người có thể xem được trang web của bạn. Có thể thực hiện theo các bước sau</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="628" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.12.25-PM-1024x628.png" alt="" class="wp-image-1755" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.12.25-PM-1024x628.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.12.25-PM-300x184.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.12.25-PM-768x471.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.12.25-PM-1536x942.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.12.25-PM-2048x1256.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.12.25-PM-380x233.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.12.25-PM-800x491.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.12.25-PM-1160x711.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.12.25-PM.png 3196w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="627" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.13.21-PM-1024x627.png" alt="" class="wp-image-1756" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.13.21-PM-1024x627.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.13.21-PM-300x184.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.13.21-PM-768x470.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.13.21-PM-1536x940.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.13.21-PM-2048x1254.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.13.21-PM-380x233.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.13.21-PM-800x490.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.13.21-PM-1160x710.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.13.21-PM.png 3198w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="629" data-id="1758" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.16.27-PM-1024x629.png" alt="" class="wp-image-1758" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.16.27-PM-1024x629.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.16.27-PM-300x184.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.16.27-PM-768x472.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.16.27-PM-1536x944.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.16.27-PM-2048x1258.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.16.27-PM-380x233.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.16.27-PM-800x492.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.16.27-PM-1160x713.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.16.27-PM.png 3200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="630" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.19.10-PM-1024x630.png" alt="" class="wp-image-1760" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.19.10-PM-1024x630.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.19.10-PM-300x185.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.19.10-PM-768x473.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.19.10-PM-1536x945.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.19.10-PM-2048x1260.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.19.10-PM-380x234.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.19.10-PM-800x492.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.19.10-PM-1160x714.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.19.10-PM.png 3198w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="629" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.20.16-PM-1024x629.png" alt="" class="wp-image-1761" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.20.16-PM-1024x629.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.20.16-PM-300x184.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.20.16-PM-768x471.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.20.16-PM-1536x943.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.20.16-PM-2048x1257.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.20.16-PM-380x233.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.20.16-PM-800x491.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.20.16-PM-1160x712.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.20.16-PM.png 3196w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>Sau khi <code>"Make public"</code> xong thì tất cả các files trong bucket đều có thể được truy cập từ internet</li>
</ul>



<h3 id="buoc-4-cau-hinh-trang-web" class="wp-block-heading">Bước 4: Cấu hình trang web</h3>



<ul class="wp-block-list">
<li>Chọn bucket của bạn và chọn <code>"Properties"</code></li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="630" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.28.29-PM-1024x630.png" alt="" class="wp-image-1762" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.28.29-PM-1024x630.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.28.29-PM-300x184.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.28.29-PM-768x472.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.28.29-PM-1536x944.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.28.29-PM-2048x1259.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.28.29-PM-380x234.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.28.29-PM-800x492.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.28.29-PM-1160x713.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.28.29-PM.png 3194w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="629" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.29.42-PM-1024x629.png" alt="" class="wp-image-1763" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.29.42-PM-1024x629.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.29.42-PM-300x184.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.29.42-PM-768x472.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.29.42-PM-1536x943.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.29.42-PM-2048x1258.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.29.42-PM-380x233.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.29.42-PM-800x491.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.29.42-PM-1160x712.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.29.42-PM.png 3198w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>Sau khi click <code>"Save changes"</code> thì tại block <strong>Static website hosting</strong> sẽ hiển thị một URL. Đây là đường dẫn đến trang web của bạn</li>



<li>Click vào URL để kiểm tra hoạt động</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="630" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.32.33-PM-1024x630.png" alt="" class="wp-image-1764" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.32.33-PM-1024x630.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.32.33-PM-300x185.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.32.33-PM-768x473.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.32.33-PM-1536x946.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.32.33-PM-2048x1261.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.32.33-PM-380x234.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.32.33-PM-800x493.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.32.33-PM-1160x714.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.32.33-PM.png 3200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 id="buoc-5-tuy-chinh-ten-mien-va-ssl-optional" class="wp-block-heading">Bước 5: Tùy chỉnh tên miền và SSL (optional)</h3>



<p class="wp-block-paragraph">Nếu bạn muốn sử dụng tên miền tùy chỉnh và cài đặt SSL cho trang web của bạn, bạn có thể sử dụng dịch vụ như Amazon CloudFront hoặc AWS Amplify</p>



<p class="wp-block-paragraph">Bài viết này đã hướng dẫn cách triển khai trang web tĩnh bằng AWS S3. Bằng cách làm theo các bước trên, bạn có thể đưa trang web của mình lên internet một cách dễ dàng và tiết kiệm chi phí. Chúc các bạn thành công!</p>
<p>The post <a href="https://blog.tomosia.com.vn/cac-buoc-trien-khai-trang-web-tinh-bang-aws-s3/">Các bước triển khai trang web tĩnh bằng AWS S3</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/cac-buoc-trien-khai-trang-web-tinh-bang-aws-s3/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>Setup New Relic for monitoring AWS Beanstalk and Java Spring Boot</title>
		<link>https://blog.tomosia.com.vn/setup-new-relic-for-monitoring-aws-beanstalk-and-java-spring-boot/</link>
					<comments>https://blog.tomosia.com.vn/setup-new-relic-for-monitoring-aws-beanstalk-and-java-spring-boot/#comments</comments>
		
		<dc:creator><![CDATA[Việt Nguyễn]]></dc:creator>
		<pubDate>Tue, 31 Oct 2023 10:10:56 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[NewRelic]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=1655</guid>

					<description><![CDATA[<p>New Relic là một dịch vụ giúp bạn theo giõi tần suất hoạt động của máy chủ, cũng&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/setup-new-relic-for-monitoring-aws-beanstalk-and-java-spring-boot/">Setup New Relic for monitoring AWS Beanstalk and Java Spring Boot</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">New Relic là một dịch vụ giúp bạn theo giõi tần suất hoạt động của máy chủ, cũng như theo giõi các ứng dụng được chạy trên máy chủ như Java, PHP, Ruby,&#8230; Chúng ta có thể theo giõi tổng quan mà không cần phải truy cập vào máy chủ để kiểm tra. </p>



<p class="wp-block-paragraph">Ở bài viết này, mình sẽ hướng dẫn các bạn setup New Relic với máy chủ sử dụng dịch vụ AWS Beanstalk và ứng dụng đc viết bằng Java Spring Boot. Bắt đầu thôiiii.</p>



<h2 id="1-dang-ki-tai-khoan-new-relic" class="wp-block-heading">1. Đăng kí tài khoản New Relic</h2>



<p class="wp-block-paragraph">Đăng kí tài khoản New Relic rất dễ dàng tại link sau: <a href="https://newrelic.com/signup">https://newrelic.com/signup</a></p>



<p class="wp-block-paragraph">Sau khi đăng kí thằng công, màn hình hiển thị trang dashboard của hệ thống và chúng ta có thể bắt đầu setup</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="510" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-1024x510.png" alt="" class="wp-image-1661" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-1024x510.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-300x149.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-768x383.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-1536x765.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-2048x1020.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-380x189.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-800x399.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-1160x578.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65.png 3356w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 id="2-tao-ung-dung-java-va-cai-dat" class="wp-block-heading">2. Tạo ứng dụng Java và cài đặt</h2>



<h3 id="2-1-thong-tin-ung-dung" class="wp-block-heading">2.1. Thông tin ứng dụng</h3>



<p class="wp-block-paragraph">Trên bảng stack, chọn ứng dụng Java và tiếp tục, sau đó chọn <strong>Don&#8217;t have access</strong> the host và chọn Java tại mục <strong>Connect your applications</strong>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="508" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-1024x508.png" alt="" class="wp-image-1662" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-1024x508.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-300x149.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-768x381.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-1536x762.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-2048x1015.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-380x188.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-800x397.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-1160x575.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66.png 3356w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Ở bài viết này chúng ta đang thực hiện trên máy chủ AWS Beanstalk nên tôi sẽ chọn <strong>On a host</strong>. Sau đó nhập tên ứng dụng và làm các bước theo hướng dẫn.</p>



<p class="wp-block-paragraph">Ở bước <strong>Tell us about your environment</strong>, tôi chọn <strong>running on Linux</strong> và framework là Spring Boot.</p>



<h3 id="2-2-cai-dat-goi-thu-vien" class="wp-block-heading">2.2. Cài đặt gói thư viện</h3>



<p class="wp-block-paragraph">Bước tiếp theo chúng ta cần tiến hành cài đặt gói thư viện. Bởi vì dùng AWS Beanstalk nên tôi sẽ thực hiện việc cài đặt trong folder <strong><em>.ebextension</em></strong></p>



<p class="wp-block-paragraph">Tạo file <strong><em>newrelic.config</em></strong> trong thư mục <strong><em>.ebextensions</em></strong></p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:16.854156494140625px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#efefe1">ShellScript</span><span role="button" tabindex="0" data-code="commands:
  01-download-java-agent:
    command: &quot;curl -O https://download.newrelic.com/newrelic/java-agent/newrelic-agent/current/newrelic-java.zip &amp;&amp; mv newrelic-java.zip /var/newrelic-java.zip&quot;
  02-unzip-java-agent:
    command: &quot;unzip -o /var/newrelic-java.zip -d /var/&quot;
  03-give-permissions-to-newrelic:
    command: &quot;chmod a+rwx /var/newrelic&quot;
  04-replace-license-key:
    command: &quot;sed -i 's/&lt;%= license_key %&gt;/your_application_license_key/g' /var/newrelic/newrelic.yml&quot;
  05-replace-application-name:
    command: &quot;sed -i 's/My Application/your_application_license_key/g' /var/newrelic/newrelic.yml&quot;
  06-enable-infras-and-logs-metric:
       command: &quot;your_application_cmd_curl_infra&quot;" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">commands:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">01-download-java-agent:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">command</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">curl -O https://download.newrelic.com/newrelic/java-agent/newrelic-agent/current/newrelic-java.zip &amp;&amp; mv newrelic-java.zip /var/newrelic-java.zip</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">02-unzip-java-agent:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">command</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">unzip -o /var/newrelic-java.zip -d /var/</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">03-give-permissions-to-newrelic:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">command</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">chmod a+rwx /var/newrelic</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">04-replace-license-key:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">command</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">sed -i &#39;s/&lt;%= license_key %&gt;/your_application_license_key/g&#39; /var/newrelic/newrelic.yml</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">05-replace-application-name:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">command</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">sed -i &#39;s/My Application/your_application_license_key/g&#39; /var/newrelic/newrelic.yml</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">06-enable-infras-and-logs-metric:</span></span>
<span class="line"><span style="color: #F8F8F2">       </span><span style="color: #8BE9FD">command</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">your_application_cmd_curl_infra</span><span style="color: #E9F284">&quot;</span></span></code></pre></div>



<p class="wp-block-paragraph">Trong đó:</p>



<ul class="wp-block-list">
<li><strong>your_application_license_key</strong>: license_key của bạn.</li>



<li><strong>your_application_license_key</strong>: Application name mà bạn đã đăng kí vơi new relic.</li>



<li><strong>your_application_cmd_curl_infra</strong>: Command bạn nhận đc ở bước <strong>Connect your logs and infrastructure</strong>.</li>
</ul>



<p class="wp-block-paragraph">Nếu bạn chỉ muốn giám sát ứng dụng mà ko muốn giám sát Infras, bạn có thể bỏ qua bước <strong>06-enable-infras-and-logs-metric</strong>. Nếu cài đặt hãy disable option <strong>Automatically answer &#8220;yes&#8221; to all install prompts. We&#8217;ll stop the installer if there&#8217;s an error.</strong> trên dashboard NewRelic</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="464" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-1024x464.png" alt="" class="wp-image-1665" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-1024x464.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-300x136.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-768x348.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-1536x695.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-2048x927.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-380x172.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-800x362.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-1160x525.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67.png 2730w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 id="3-deploy-voi-codebuild-va-codepipeline" class="wp-block-heading">3. Deploy với CodeBuild và CodePipeline</h2>



<p class="wp-block-paragraph">Chúng ta cần tạo file Procfile trong folder root của source code để định nghĩa câu lệnh chạy ứng dụng java kèm theo NewRelic</p>



<p class="wp-block-paragraph"><strong>Procfile</strong>:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:8.42535400390625px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#efefe1">ShellScript</span><span role="button" tabindex="0" data-code="web: java -javaagent:/var/newrelic/newrelic.jar -jar app.jar" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">web:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">java</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-javaagent:/var/newrelic/newrelic.jar</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-jar</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">app.jar</span></span></code></pre></div>



<p class="wp-block-paragraph">Config sẽ không chạy nếu folder .ebextensions không được deploy lên Beanstalk. Dưới đây là file <strong>Buildspec</strong> của tôi</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:16.854171752929688px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#efefe1">ShellScript</span><span role="button" tabindex="0" data-code="version: 0.2

phases:
  install:
    runtime-versions:
      java: corretto11
  build:
    commands:
      - mvn install
      - mv target/*.jar app.jar
artifacts:
  files:
    - Procfile
    - app.jar
    - .ebextensions/**/*" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">version:</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">0.2</span></span>
<span class="line"></span>
<span class="line"><span style="color: #50FA7B">phases:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">install:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">runtime-versions:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #50FA7B">java:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">corretto11</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">build:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">commands:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #50FA7B">-</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">mvn</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">install</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #50FA7B">-</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">mv</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">target/</span><span style="color: #BD93F9; font-style: italic">*</span><span style="color: #F1FA8C">.jar</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">app.jar</span></span>
<span class="line"><span style="color: #50FA7B">artifacts:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">files:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">-</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">Procfile</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">-</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">app.jar</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">-</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">.ebextensions/</span><span style="color: #BD93F9; font-style: italic">**</span><span style="color: #F1FA8C">/</span><span style="color: #BD93F9; font-style: italic">*</span></span></code></pre></div>



<p class="wp-block-paragraph">Cuối cùng sau khi deploy thành công, thực hiện Test Connection trên NewRelic để tạo ứng dụng:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="351" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-1024x351.png" alt="" class="wp-image-1666" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-1024x351.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-300x103.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-768x263.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-1536x527.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-2048x702.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-380x130.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-800x274.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-1160x398.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68.png 2258w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 id="4-tong-ket" class="wp-block-heading">4. Tổng kết</h2>



<p class="wp-block-paragraph">Còn 1 phần quan trọng mình chưa đến đó là chi phí, theo mình tìm hiểu NewRelic sẽ tính phía dựa trên dung lượng sử dụng trên hệ thống, chúng ta sẽ được miễn phí với 100GB/tháng</p>



<p class="wp-block-paragraph">Trên đây là tổng hợp các bước setup NewRelic với ứng dụng Java chạy trên AWS Beanstalk của mình, hi vọng giúp ích mọi người.</p>



<p class="wp-block-paragraph">Về những thông số và giá trị đem lại anh em hãy tự trải nghiệm và tận hưởng nheeeeeeeeé</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://blog.tomosia.com.vn/setup-new-relic-for-monitoring-aws-beanstalk-and-java-spring-boot/">Setup New Relic for monitoring AWS Beanstalk and Java Spring Boot</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/setup-new-relic-for-monitoring-aws-beanstalk-and-java-spring-boot/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
	</channel>
</rss>
